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.



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...



Naslednje poglavje
Pogojni stavki

Prejšnje poglavje
Funkcije