Ta teden se bomo osredotočili na polja (arrays). Nekateri jim rečejo tudi tabele.
Predstavljaj si, da imaš 10 spremenljivk, recimo:
$stevilo1, $stevilo2, $stevilo3, $stevilo4,..., $stevilo10. Prvi problem je, da ne moremo na hiter in univerzalen način npr. sešteti vseh 10 (kar bomo počeli enkrat naslednjič), drugi pa, da je pri večjih količinah spremenljivk problem v nadzoru, saj nam stvari kaj kmalu uidejo iz rok. Da bi se tega problema rešili, so programerji "izumili" polja spremenljivk.
Polja spremenljivk imajo lahko n dimenzij, najbolj preprosto polje je 1-dimenzionalno:
Primer polja z imenom stevila, v katerem smo določili 5 "prostorčkov":
| 1 | 2 | 3 | 4 | 5 |
To odgovarja 5 spremenljivkam - $stevilo1, $stevilo2, $stevilo3, $stevilo4 in $stevilo5, s tem da je tukaj poimenovanje malce drugačno - če bi recimo v 1. prostorček želeli shraniti število 15, bi napisali:
$stevila[0] = 15;
Zadeva se uporablja podobno kot spremenljivke, samo da je na
koncu imena polja v oglatih oklepajih še oznaka njenega ključa ("predalčka")
v oglatih oklepajih. En par oglatih oklepajev pomeni eno dimenzijo.
Še dva primera uporabe:
print $stevila[2]; // na zaslon izpišemo
vrednost 3.
predalčka
$vsota = $stevila[1] + $stevila[4]; // v spremenljivko vsota damo
seštevek 2. in 5. predalčka
Primer 2-dimenzionalnega polja, ki najbolj "klasično" odgovarja tabeli (v tem primeru sem v celice tabele zapisal "koordinate" namesto vrednosti):
| 0, 0 | 0, 1 | 0, 2 | 0, 3 | 0, 4 | 0, 5 |
| 1, 0 | 1, 1 | 1, 2 | 1, 3 | 1, 4 | 1, 5 |
Primer izpisa vrednosti rumeno označenega prostorčka:
print $stevila[1][4];
Podobno bi naredili tudi 3-dimenzionalno polje.
PHP pri ustvarjanju polj ne komplicira preveč. Neko n-dimenzionalno polje lahko ustvarimo tako, da mu določimo vrednost na nekem mestu v polju; spodaj sta primera za 3-dimenzionalno polje in za preprosto 1-dimenzionalno polje:
$test[4][3][6] = "Marko"; // ustvarimo neko 3-dimenzionalno
polje in mu določimo element na
// poziciji 4,3,6
/* ustvarimo še 1-dimenzionalno polje s 3 elementi: */
$test2[0] = "zaba";
$test2[1] = "krava";
$test2[2] = "kobilica";
V zgornjih primerih smo pri definiranju vedno navedli tudi št. prostorčka, kar ni nujno potrebno. Oglejmo si še en primer:
$testiramo[] = "a"; // ustvarimo 5 zaporednih prostorčkov v
1-dimenzionalnem polju
$testiramo[] = "b";
$testiramo[] = "c";
$testiramo[] = "d";
$testiramo[] = "e";
print $testiramo[1]; // izpiše "b"
print $testiramo[4]; // izpiše "e"
Še ena možnost je, da uporabimo funkcijo array():
$polje = array("jabolko","banana","hruska","grenivka");
V tem primeru smo ustvarili 1-dimenzionalno polje s 4 elementi, do katerih dostopamo prek "spremenljivk"
$polje[0] (tukaj je vrednost "jabolko"), $polje[1] ("banana"), $polje[2] ("hruska") in $polje[3] ("grenivka").
Seveda lahko funkcijo array() uporabimo tudi večkrat znotraj le-te - primer 2-dimenzionalnega polja s 3 vrsticami in 2 stolpcema:
$barve =
array(array("modra","rdeca"),array("zelena","bela"),array("crna","rumena"));
print $barve[0][1]; // izpiše "rdeca"
print $barve[2][0]; // izpice "crna"
Ključe v poljih lahko namesto s števili označimo tudi z npr. stringi. Primer je recimo datoteka z nastavitvami za forum:
$nastavitve["username"] = "admin";
$nastavitve["password"] = "dododo123";
$nastavitve["baza"] = "mojforum";
Tukaj odpade klicanje "predalčkov" z npr. $nastavitve[0].
Zanimiv primer uporaba je tudi tale, kjer namesto niza kot imena ključa vstavimo kar spremenljivko:
$ime_kljuca = "baza";
print $nastavitve[$ime_kljuca]; // je enako kot: print
$nastavitve["baza"];
Poleg podajanja vrednosti določenim "predalčkom" v polju lahko uporabimo tudi asociativni pristop s funkcijo array():
$polje = array("ime" => "Marko", "priimek" =>
"Štamcar", "starost" => 20);
print $polje["priimek"]; // izpiše "Štamcar"
/* seveda lahko takšno naštevanje
zapišemo tudi na "lepši" način: */
$polje = array(
"ime" => "Marko",
"priimek" => "Štamcar",
"starost" => 20
);
V tem primeru funkciji array() kot argumente podamo pare ključev in vrednosti, ločene z =>.
Naštejmo nekaj najbolj koristnih funkcij za delo s polji:
array()
- ustvarjanje novih polj
count() -
vrne št. elementov v polju
in_array() -
vrne true,
če nek element v polju obstaja, drugače pa vrne false
sort() -
sortira polje po vrednostih (po abecedi, po velikosti,...)
ksort() -
sortira polje po ključih (po abecedi, po velikosti,...)
Opomba: za seznam argumentov, ki jih sprejmejo funkcije, si boš moral ogledati njihovo dokumentacijo na php.net.
Poseben odstavek bom namenil funkciji print_r, ki se obnaša podobno kot funkcija print, le da lahko z njo na lep način izpišemo vsebino nekega polja. Poglejmo si primer:
$barve =
array(array("modra","rdeca"),array("zelena","bela"),array("crna","rumena"));
print "<pre>";
print_r($barve);
print "</pre>";
Ker izpis obsega več vrstic in je oblikovan s presledki, moramo zaradi preglednosti uporabiti HTML oznako <pre>. Izpis, ki se nam pokaže, je sicer bolj "tehničen", pride pa prav pri razhroščevanju naših programov.
S polji povezana tema sta tudi v PHP vgrajeni polji $_GET in $_POST. Ob izvajanju naše spletne strani lahko iz njiju izluščimo podatke, poslane prek metod GET in POST.
Za kaj gre? V našo PHP skripto lahko podatke pošljemo prek HTML obrazca (<form>), kjer lahko lastnost method določimo kot get ali post. Pri prvem načinu se vrednosti vnosnih okenc in ostalih delov obrazca pošljejo "zakodirane" v URL naslovu, pri drugem pa "nevidno" prek HTTP protokola. Metoda get se lahko uporablja tudi brez obrazcev, ker lahko na ta način podatke vnesemo neposredno v URL naslov.
1. Primer: imamo spletni obrazec z dvema vnosnima poljema - "Ime" in "Priimek". Ko uporabnik vnese svoje podatke in klikne gumb pošlji, se nova stran, ki je v <form> navedena pod action (lahko je tudi ista) pokliče takole:
test.php?ime=Marko&priimek=Štamcar
Na ta način so se podatki poslali prek GET metode. ime in priimek sta imeni elementov obrazca, ki smo ju določili z atributom name.
V tem primeru torej prek GET-a pošljemo vrednosti za ime in priimek.
To postaneta ključa v polju $_GET:
$_GET["ime"] in $_GET["priimek"]
Primer PHP kode skupaj s HTML kodo za obrazec:
<form method="get">
ime: <input type="text" name="ime"/><br
/>
priimek: <input type="text" name="priimek"/><br
/>
<input type="submit" value="Pošlji"/>
</form>
<?php
print $_GET["ime"] . " " .
$_GET["priimek"];
?>
Seveda lahko podatke prek GET pošljemo tudi brez obrazca, recimo takole:
<a
href="?ime=Marko&priimek=Štamcar">klikni
me</a>
<?php
print $_GET["ime"] . " " .
$_GET["priimek"];
?>
Pri pošiljanju podatkov prek obrazcev se največkrat uporablja ta metoda. Primer kode bi bil podoben kot zgornji primer z obrazcem, le da namesto method="get" uporabimo method="post" in da nato do vrednosti, poslanih prek obrazca, dostopamo prek polja $_POST.
$_SERVER je še eno polje, vgrajeno v PHP - v njem so spravljeni različni podatki o strežniku in uporabniku, ki obiskuje stran, recimo:
$_SERVER['REMOTE_ADDR']
- IP naslov uporabnika, ki je obiskal našo stran (skripto)
$_SERVER['DOCUMENT_ROOT']
- pot na strežniku, v kateri se nahaja naša skripta
$_SERVER['HTTP_REFERER']
- stran, prek katere smo prišli do naše skripte
(če do nje dostopamo neposredno, bo ta vrednost prazna)
$_SERVER['HTTP_USER_AGENT']
- podatki o brskalniku uporabnika, ki je obiskal našo stran
(skripto)
Naslednjič se bomo vrgli v pogojni stavek if in zanko for, do takrat pa le pridno reši domačo nalogo :)