Polja spremenljivk (ang. arrays)
PHP tečaj: Polja spremenljivk (ang. arrays)
Čas je, da se spoznamo s konceptom polj (ang. arrays), ki jih uporabljamo za to, da znotraj ene spremenljivke shranimo večje število različnih vrednosti.
Prva težava, ki se pojavi pri takšnem načinu shranjevanja števil, je npr. eleganten izračun hitre vsote vseh desetih števil. Druga težava je v tem, da imamo pri večjih količinah spremenljivk lahko problem z nadzorom naše programske kode, saj nam stvari kaj kmalu "uidejo iz rok".
Polja spremenljivk imajo lahko n dimenzij. Najbolj preprosto polje je 1-dimenzionalno, ki predstavlja enostaven seznam spremenljivk. Zelo pogosto uporabljana polja so 2-dimenzionalna, kar si lahko predstavljamo kot klasično tabelo.
Zgornjih 10 spremenljivk lahko združimo v eno polje z imenom stevila, ki ima 10 "prostorčkov". Če želimo v prvi prostorček shraniti število 15, v drugi prostorček pa število 20, to storimo takole:
Med oglatimi oklepaji navedemo indeks (ang. index) prostorčka3, ki mu pravimo tudi ključ (ang. key).
Poleg zgoraj omenjene sintakse, kjer z definicijo prvega elementa polje tudi ustvarimo, lahko uporabimo tudi takšno sintakso:
Ker znotraj oglatih oklepajev nismo eksplicitno navedli željenega indeksa, ga je PHP vsakič posebej določil kar sam. Na ta način smo torej ustvarili 1-dimenzionalno polje z imenom test, znotraj katerega je PHP samodejno določil vrednosti za ključe od 0 do 3.
Izpisovanje vrednosti iz polj je precej podobno izpisovanju vrednosti spremenljivk. Primer, kjer iz zgornjega polja izpišemo 3. element (ki ima zaradi štetja od 0 v resnici indeks 2):
Polje lahko ustvarimo tudi s funkcijo array(), ki za argumente sprejme poljubno število elementov polja:
Ustvarili smo 1-dimenzionalno polje s 4 elementi, ki imajo ključe od 0 do 3.
Oglejmo si še primer 2-dimenzionalnega polja, ki predstavlja tabelo s 3 vrsticami in 2 stolpcema:
Pri 2-dimenzionalnih poljih torej obe "koordinati" navedemo v dveh zaporednih parih oglatih oklepajev.
V takem primeru do posameznih elementov ne moremo dostopati preko številčnih ključev, lahko pa do njih dostopamo preko ustreznih nizov. Temu rečemo asociativni pristop.
Če specifične ključe kombiniramo s funkcijo array(), lahko uporabimo asociativni pristop, kjer za argumente funkcije podamo pare ključev in vrednosti, ločene z =>:
Še primer, kjer za ključ uporabimo spremenljivko:
Funkcije za delo s polji z bolj specifičnimi vlogami:
Funkcije za delo z nizi, ki (lahko) uporabljajo polja:
Super — zdaj so vam polja mnogo bližje. V praksi se bo izkazalo, da bo marsikateri programerski izziv brez uporabe polj praktično nerešljiv, z uporabo polj pa bo rešitev popolnoma enostavna.
V naslednjem poglavju pa se programiranje začne zares...
Prednosti uporabe polj (ang. arrays)
Predstavljajte si, da imate 10 spremenljivk, recimo $stevilo1, $stevilo2, $stevilo3, ... , $stevilo9, $stevilo10.Prva težava, ki se pojavi pri takšnem načinu shranjevanja števil, je npr. eleganten izračun hitre vsote vseh desetih števil. Druga težava je v tem, da imamo pri večjih količinah spremenljivk lahko problem z nadzorom naše programske kode, saj nam stvari kaj kmalu "uidejo iz rok".
Polja spremenljivk imajo lahko n dimenzij. Najbolj preprosto polje je 1-dimenzionalno, ki predstavlja enostaven seznam spremenljivk. Zelo pogosto uporabljana polja so 2-dimenzionalna, kar si lahko predstavljamo kot klasično tabelo.
Zgornjih 10 spremenljivk lahko združimo v eno polje z imenom stevila, ki ima 10 "prostorčkov". Če želimo v prvi prostorček shraniti število 15, v drugi prostorček pa število 20, to storimo takole:
$stevila[0] = 15;
$stevila[1] = 20;
Med oglatimi oklepaji navedemo indeks (ang. index) prostorčka3, ki mu pravimo tudi ključ (ang. key).
Poleg zgoraj omenjene sintakse, kjer z definicijo prvega elementa polje tudi ustvarimo, lahko uporabimo tudi takšno sintakso:
$test[] = "a";
$test[] = "b";
$test[] = "c";
$test[] = "d";
Ker znotraj oglatih oklepajev nismo eksplicitno navedli željenega indeksa, ga je PHP vsakič posebej določil kar sam. Na ta način smo torej ustvarili 1-dimenzionalno polje z imenom test, znotraj katerega je PHP samodejno določil vrednosti za ključe od 0 do 3.
Izpisovanje vrednosti iz polj je precej podobno izpisovanju vrednosti spremenljivk. Primer, kjer iz zgornjega polja izpišemo 3. element (ki ima zaradi štetja od 0 v resnici indeks 2):
echo $test[2]; // izpiše "c"
Polje lahko ustvarimo tudi s funkcijo array(), ki za argumente sprejme poljubno število elementov polja:
$polje = array("jabolko", "banana", "hruška", "limona");
Ustvarili smo 1-dimenzionalno polje s 4 elementi, ki imajo ključe od 0 do 3.
Oglejmo si še primer 2-dimenzionalnega polja, ki predstavlja tabelo s 3 vrsticami in 2 stolpcema:
$zivali = array(array("muc", "pes"), array("tuna", "sardina"), array("miš", "slon"));
echo $zivali[0][1]; // izpiše "pes"
echo $zivali[2][0]; // izpiše "miš"
Pri 2-dimenzionalnih poljih torej obe "koordinati" navedemo v dveh zaporednih parih oglatih oklepajev.
Nenumerični ključi
Ključe v poljih lahko namesto s števili označimo tudi z nizi. Primer takšne uporabe je npr. polje, ki vsebuje podatke o Sloveniji:$slovenija["st_prebivalcev"] = 2066000;
$slovenija["velikost_km2"] = 20273;
$slovenija["himna"] = "Zdravljica";
$slovenija["lepa_dezela"] = true;
V takem primeru do posameznih elementov ne moremo dostopati preko številčnih ključev, lahko pa do njih dostopamo preko ustreznih nizov. Temu rečemo asociativni pristop.
Če specifične ključe kombiniramo s funkcijo array(), lahko uporabimo asociativni pristop, kjer za argumente funkcije podamo pare ključev in vrednosti, ločene z =>:
$polje = array("ime" => "Janez", "poklic" => "programer", "starost" => 26);
echo $polje["poklic"]; // izpiše "programer"
Še primer, kjer za ključ uporabimo spremenljivko:
$kljuc = "poklic";
echo $polje[$kljuc]; // prav tako izpiše "programer"
Funkcije za delo s polji
Nekaj najbolj koristnih funkcij za delo s polji:- array(element1, element2, ...) — ustvari novo polje
- count(polje) — vrne število elementov v polju
- in_array(element, polje) — vrne true, če element v polju obstaja, sicer pa vrne false
- sort(polje) — sortira polje po vrednostih (po abecedi, po velikosti, ...)
- ksort(polje) — sortira polje po ključih (po abecedi, po velikosti, ...)
- print_r(polje) — izpiše celotno vsebino polja na zaslon, kar je zelo uporabno za razhroščevanje
Funkcije za delo s polji z bolj specifičnimi vlogami:
- shuffle(polje) — naključno premeša vrstni red elementov
- list(spr1, spr2, ...) = polje — v spremenljivke spr1, spr2, ... shrani vrednosti polje[0], polje[1], ... (deluje samo nad polji z numeričnimi ključi)
- array_rand(polje) — vrne ključ naključnega elementa iz polja
- array_flip(polje) — zamenja ključe z vrednostmi in vrednosti s ključi ter vrne novo polje
- array_merge(polje1, polje2 [, polje3, ... ]) — vrne polje z združenimi elementi večih podanih polj
Funkcije za delo z nizi, ki (lahko) uporabljajo polja:
- str_replace(najdi, zamenjaj_z, niz) — če funkciji za argumenta najdi ter zamenjaj_z podamo polji, bo vrnila niz z zamenjanimi vsemi pari iz teh dveh polj
Primer: echo str_replace(array("p", "e"), array("r", "i"), "pes"); // izpiše "ris" - explode(locilnik, niz) — vrne polje s podnizi podanega niza, ki ga "razkosa" locilnik
Primer: explode(" ", "To je stavek") vrne polje s tremi elementi in sicer "To", "je" in "stavek" - implode(locilnik, polje) — vrne niz, v katerem so zaporedno zapisani vsi elementi iz polja, ločeni z nizom locilnik
Primer: implode("-", array("ring", "a", "raja")) vrne niz "ring-a-raja"
Super — zdaj so vam polja mnogo bližje. V praksi se bo izkazalo, da bo marsikateri programerski izziv brez uporabe polj praktično nerešljiv, z uporabo polj pa bo rešitev popolnoma enostavna.
Poskusite: Spet je čas, da odprete datoteko index.php, ki jo zdaj znate že sami urejati ter "poganjati" v svojem brskalniku. Znotraj te datoteke poskusite tudi sami uporabiti različne tipe polj, ki smo jih obdelali v tem poglavju. Praktične izkušnje pri uporabi polj vam bodo prišle zelo prav.
V naslednjem poglavju pa se programiranje začne zares...