vadnica-logo
Editor Moj Blog Moje storitve O projektu Telegram O meni O meni

PHP Tabele (Arrays)

Tabela je posebna spremenljivka, ki lahko vsebuje več vrednosti pod enim samim imenom. Do teh vrednosti nato enostavno dostopamo s sklicevanjem na indeksno številko ali poimenovan ključ. V PHP jeziku ločimo tri vrste tabel: Indeksirane tabele (z numeričnim indeksom), Asociativne tabele (z imenovanimi ključi) in Večdimenzionalne tabele (tabele, ki vsebujejo druge tabele). Elementi so lahko poljubni podatkovni tipi: nizi, števila, objekti ali celo funkcije.

PRIMER
REZULTAT
Tu bo prikazan rezultat...

Indeksirane tabele in numerično iskanje

Indeksirane tabele uporabljajo številke (indekse) za dostop do svojih elementov. Ključno pravilo, ki ga mora usvojiti vsak začetnik, je, da se **štetje vedno začne z indeksno številko 0**, in ne 1. Te tabele so idealne za sezname elementov, kjer vrstni red igra pomembno vlogo, kot so seznami uporabnikov, vrstice iz baze podatkov ali preprosti nakupovalni seznami.

Asociativne tabele (Ključ => Vrednost)

Asociativne tabele nam namesto privzetih številk omogočajo, da vsakemu elementu poljubno dodelimo lasten, poimenovan ključ (String). To počnemo z uporabo operatorja za dodeljevanje =>. Asociativne tabele so izjemno močne za predstavitev strukturiranih podatkov (npr. podatki o avtomobilu, kjer so ključi znamka, model in letnik), saj naredijo kodo veliko bolj berljivo in logično.

Večdimenzionalne tabele in matrični podatki

Večdimenzionalna tabela je preprosto povedano "tabela, ki znotraj sebe vsebuje eno ali več drugih tabel". PHP podpira gnezdenje tabel do poljubne globine (dvodimenzionalne, trodimenzionalne itd.). Te strukture se najpogosteje uporabljajo za shranjevanje kompleksnejših tabelaričnih podatkov, matrik ali podatkovnih struktur, ki so naložene iz relacijskih baz podatkov.

Koncept / Operacija Opis delovanja Primer (Koda za simulator)
Indeksirane tabele V indeksiranih tabelah ima vsak element avtomatsko dodeljeno indeksno številko. $avti = ["Audi", "BMW", "Volvo"]; echo $avti[1]; // Izpiše BMW
Sprememba vrednosti z indeksom Za spremembo vrednosti določenega elementa se neposredno sklicujemo na njegovo številko indeksa. $barve = ["rdeča", "zelena"]; $barve[1] = "modra"; print_r($barve);
Zankanje skozi indeksirano tabelo Če želimo pregledati in izpisati vse vrednosti indeksirane tabele, uporabimo zanko foreach. $sadje = ["Jabolko", "Banana"]; foreach ($sadje as $s) { echo $s . " "; }
Indeksna številka Ključ indeksirane tabele je vedno celo število, privzeta vrednost prvega elementa pa je indeks 0. $t = ["A", "B"]; echo "Prvi indeks je: " . key($t); // 0
Asociativne tabele Asociativne tabele uporabljajo imenovane tekstovne ključe, ki jih elementom dodelimo ročno. $starost = ["Peter" => 35, "Ana" => 28]; echo $starost["Ana"];
Dostop do asociativnih tabel Za dostop do želene vrednosti znotraj asociativne tabele se sklicujemo na ime njenega ključa v narekovajih. $oseba = ["ime" => "Janez"]; echo $oseba["ime"];
Sprememba vrednosti s ključem Če želimo posodobiti ali spremeniti vrednost elementa asociativne tabele, uporabimo ime njegovega ključa. $cene = ["kava" => 1.5]; $cene["kava"] = 1.8; echo $cene["kava"];
Zankanje skozi asociativno tabelo Z uporabo foreach ($t as $k => $v) lahko enostavno izpišemo tako ključe kot njihove vrednosti. $t = ["SLO" => "Ljubljana"]; foreach($t as $k => $v) { echo "$k: $v"; }
Večvrstična tabela Prelomi vrstic pri deklaraciji tabel niso pomembni, zato lahko zaradi preglednosti elemente pišemo v več vrstic. $t = [
  "A",
  "B"
]; print_r($t);
Končna vejica za vsakim elementom Zadnja vejica za zadnjim elementom v tabeli je v PHP-ju uradno dovoljena in preprečuje napake pri dodajanju novih vrstic. $t = ["ena", "dva",]; echo count($t); // Izpiše 2
Ključi tabele Pri ustvarjanju indeksiranih tabel se ključi generirajo samodejno, če jih ne navedemo ročno. $t = ["X", "Y"]; print_r(array_keys($t));
Razglasitev praznega polja Tabelo lahko najprej inicializiramo kot popolnoma prazno, elemente pa ji dinamično dodajamo kasneje v skripti. $t = []; $t[] = "Prvi"; print_r($t);
Mešanje ključev tabele PHP omogoča, da znotraj iste tabele brez težav mešamo numerične indekse in poimenovane asociativne ključe. $t = [0 => "A", "ime" => "B"]; echo $t[0] . " " . $t["ime"];
Dostop do elementa tabele Do elementov dostopamo preko sintakse z oglatimi oklepaji, kamor vpišemo pripadajoči indeks ali ključ. $t = ["podatek"]; echo $t[0];
Dvojni ali enojni narekovaji Pri dostopu do asociativnih ključev lahko uporabljamo enojne ali dvojne narekovaje, učinek je enak. $t = ["k" => 1]; echo $t['k'] . $t["k"];
Izvedi funkcijski element Elementi tabele so lahko poljubni podatki, vključno z anonimnimi funkcijami, ki jih lahko pokličemo neposredno. $t = [function() { return "Živjo"; }]; echo $t[0]();
Posodobitev elementa v tabeli Z uporabo obstoječega ključa ali indeksa prepišemo staro vrednost z novo vrednostjo. $t = ["stari"]; $t[0] = "novi"; echo $t[0];
Posodobitev elementa v zanki Če želimo spreminjati elemente znotraj foreach zanke, moramo pred spremenljivko uporabiti referenco &. $t = [1, 2]; foreach($t as &$v) { $v *= 10; } print_r($t);
Dodajanje elementa tabeli Če želimo dodati element na konec indeksirane tabele, preprosto uporabimo prazne oglate oklepaje []. $t = ["A"]; $t[] = "B"; print_r($t); // "B" dobi indeks 1
Dodajanje elementa asociativni tabeli Novemu poimenovanemu ključu znotraj oglatih oklepajev enostavno pripišemo želeno vrednost. $t = ["a" => 1]; $t["b"] = 2; print_r($t);
Dodajanje elementov (array_push) Za dodajanje enega ali več elementov na konec indeksirane tabele hkrati uporabimo funkcijo array_push(). $t = [1]; array_push($t, 2, 3); print_r($t);
Dodajanje elementov asociativni tabeli (+=) Za združevanje ali dodajanje manjkajočih elementov v asociativno tabelo lahko uporabimo operator +=. $t = ["a" => 1]; $t += ["b" => 2, "c" => 3]; print_r($t);
Odstranitev elementa iz tabele Za odstranitev elementa iz indeksirane tabele in ponovno uravnoteženje numeričnih indeksov uporabimo array_splice(). $t = ["A", "B", "C"]; array_splice($t, 1, 1); print_r($t); // Odstrani B
Odstranitev več elementov Z ustreznim parametrom dolžine v funkciji array_splice() lahko odstranimo poljubno število zaporednih elementov. $t = [1, 2, 3, 4]; array_splice($t, 1, 2); print_r($t); // Odstrani 2 in 3
Odstranitev iz asociativne tabele Za izbris specifičnega elementa ali ključa iz asociativne tabele uporabimo vgrajeno funkcijo unset(). $t = ["a" => 1, "b" => 2]; unset($t["a"]); print_r($t);
Uporaba funkcije array_diff() Z uporabo array_diff() lahko filtriramo in odstranimo neželene vrednosti na podlagi primerjave z drugo tabelo. $t = ["A", "B", "C"]; $rez = array_diff($t, ["B"]); print_r($rez);
Odstranitev prvega elementa Funkcija array_shift() odstrani prvi element iz tabele in premakne vse ostale indekse navzdol. $t = ["A", "B"]; echo array_shift($t); // Izpiše A
Odstranitev zadnjega elementa Funkcija array_pop() odstrani in vrne popolnoma zadnji element iz izbrane tabele. $t = ["A", "B"]; echo array_pop($t); // Izpiše B
Razvrstitev v naraščajočem vrstnem redu Funkcija sort() razvrsti elemente indeksirane tabele v naraščajočem abecednem ali numeričnem vrstnem redu. $t = ["B", "A", "C"]; sort($t); print_r($t);
Razvrstitev v padajočem vrstnem redu Funkcija rsort() razvrsti elemente indeksirane tabele v padajočem (obratnem) abecednem ali numeričnem redu. $t = [1, 3, 2]; rsort($t); print_r($t);
Razvrstitev po vrednosti (asort) Funkcija asort() razvrsti asociativno tabelo v naraščajočem vrstnem redu glede na vrednosti, pri čemer ohrani ključe. $t = ["Janez" => 35, "Ana" => 25]; asort($t); print_r($t);
Razvrstitev po ključu (ksort) Funkcija ksort() razvrsti asociativno tabelo v naraščajočem vrstnem redu glede na njene ključe. $t = ["B" => 2, "A" => 1]; ksort($t); print_r($t);
Razvrstitev po vrednosti padajoče (arsort) Funkcija arsort() razvrsti asociativno tabelo v padajočem vrstnem redu glede na njene vrednosti. $t = ["Janez" => 35, "Ana" => 25]; arsort($t); print_r($t);
Razvrstitev po ključu padajoče (krsort) Funkcija krsort() razvrsti asociativno tabelo v padajočem vrstnem redu glede na njene ključe. $t = ["A" => 1, "B" => 2]; krsort($t); print_r($t);
Dvodimenzionalna tabela Predstavlja tabelo tabel. Do njenih ugnezdenih elementov dostopamo z zaporedno uporabo dvojnih oglatih oklepajev. $matrika = [[1, 2], [3, 4]]; echo $matrika[1][0]; // Vrstica 1, stolpec 0 -> Izpiše 3

PHP Array Funkcije

Funkcije za tabele nam omogočajo dostop do tabel in upravljanje z njimi. Podprte so preproste in večdimenzionalne tabele. Funkcije za tabele so del PHP jedra, zato nam za njihovo uporabo ni potrebno nameščati ničesar dodatnega. Slovenski prevod za Array je tabela, zato bom uporabljal to slovensko besedo v vsaki vadnici.

Najdeno: -
Ime funkcije Opis delovanja Primer (Koda za simulator)
array() Ustvari novo tabelo. $t = array(1, 2, 3); print_r($t);
array_change_key_case() Spremeni vse ključe v tabeli v male ali velike črke. $t = ["Ime" => 1]; print_r(array_change_key_case($t, CASE_LOWER));
array_chunk() Razdeli tabelo na več manjših delov (kosov) podane velikosti. $t = [1, 2, 3, 4]; print_r(array_chunk($t, 2));
array_column() Vrne vrednosti iz enega samega stolpca v vhodni (večdimenzionalni) tabeli. $u = [["id"=>1, "n"=>"A"], ["id"=>2, "n"=>"B"]]; print_r(array_column($u, "n"));
array_combine() Ustvari tabelo tako, da uporabi eno tabelo za ključe in drugo za vrednosti. $k = ["a", "b"]; $v = [1, 2]; print_r(array_combine($k, $v));
array_count_values() Prešteje pojavitve vseh enakih vrednosti v tabeli. $t = ["A", "B", "A"]; print_r(array_count_values($t));
array_diff() Primerja tabele in vrne razliko (primerja samo vrednosti). print_r(array_diff([1, 2, 3], [1, 2])); // Vrne 3
array_diff_assoc() Primerja tabele in vrne razliko (primerja tako ključe kot vrednosti). print_r(array_diff_assoc(["a"=>1, "b"=>2], ["a"=>1, "b"=>5]));
array_diff_key() Primerja tabele in vrne razliko (primerja samo ključe). print_r(array_diff_key(["a"=>1, "b"=>2], ["a"=>5]));
array_diff_uassoc() Primerja tabele in vrne razliko (ključe in vrednosti) z lastno funkcijo za primerjavo ključev. print_r(array_diff_uassoc([1,2], [1], "strcasecmp"));
array_diff_ukey() Primerja tabele in vrne razliko (samo ključe) z uporabo lastne funkcije za primerjavo ključev. print_r(array_diff_ukey(["a"=>1], ["b"=>2], "strcasecmp"));
array_fill() Napolni tabelo s podanimi vrednostmi od določenega indeksa naprej. print_r(array_fill(0, 3, "PHP")); // 3-krat izpiše PHP
array_fill_keys() Napolni tabelo z vrednostmi za specifično podane ključe. print_r(array_fill_keys(["a", "b"], 100));
array_filter() Filtrira elemente tabele s pomočjo funkcije povratтного klica (callback). print_r(array_filter([1, 2, 3, 4], function($v){ return $v % 2 == 0; }));
array_flip() Zamenja vse ključe z njihovimi pripadajočimi vrednostmi v tabeli. $t = ["a" => "v"]; print_r(array_flip($t)); // "v" postane ključ
array_intersect() Primerja tabele in vrne presek oziroma ujemanja (primerja samo vrednosti). print_r(array_intersect([1, 2, 3], [2, 3, 4])); // Vrne 2, 3
array_intersect_assoc() Primerja tabele in vrne ujemanja (primerja tako ključe kot vrednosti). print_r(array_intersect_assoc(["a"=>1], ["a"=>1, "b"=>2]));
array_intersect_key() Primerja tabele in vrne ujemanja (primerja samo ključe). print_r(array_intersect_key(["a"=>1, "b"=>2], ["a"=>5]));
array_intersect_uassoc() Primerja tabele in vrne ujemanja (ključe in vrednosti) z lastno funkcijo za primerjavo ključev. print_r(array_intersect_uassoc(["a"=>1], ["a"=>1], "strcasecmp"));
array_intersect_ukey() Primerja tabele in vrne ujemanja (samo ključe) z uporabo lastne funkcije za primerjavo ključev. print_r(array_intersect_ukey(["a"=>1], ["a"=>2], "strcasecmp"));
array_key_exists() Preveri, ali določen ključ obstaja v tabeli (vrne true/false). var_dump(array_key_exists("ime", ["ime" => "Borut"]));
array_keys() Vrne vse ključe (ali indeksne številke) v tabeli. print_r(array_keys(["a" => 1, "b" => 2]));
array_map() Pošlje vsak element tabele lastni funkciji, ki vrne popolnoma nove vrednosti. print_r(array_map(function($v){ return $v * 2; }, [1, 2, 3]));
array_merge() Združi eno ali več tabel v eno samo skupno tabelo. print_r(array_merge([1, 2], [3, 4]));
array_merge_recursive() Rekurzivno združi eno ali več tabel v eno (vsebine enakih ključev združi v podtabelo). print_r(array_merge_recursive(["a"=>1], ["a"=>2]));
array_multisort() Razvrsti več tabel hkrati ali pa kompleksno večdimenzionalno tabelo. $t = [3, 1, 2]; array_multisort($t); print_r($t);
array_pad() Razširi tabelo na določeno dolžino z določeno polnilno vrednostjo. print_r(array_pad([1, 2], 4, 0)); // Vrne [1, 2, 0, 0]
array_pop() Odstrani in vrne popolnoma zadnji element iz tabele. $t = [1, 2, 3]; echo array_pop($t); // Izpiše 3
array_product() Izračuna skupni zmnožek vseh številskih vrednosti v tabeli. echo array_product([2, 3, 4]); // 2 * 3 * 4 = 24
array_push() Doda enega ali več elementov na sam konec tabele. $t = [1]; array_push($t, 2, 3); print_r($t);
array_rand() Vrne enega ali več poljubnih naključnih ključev iz tabele. $t = ["a"=>1, "b"=>2, "c"=>3]; echo array_rand($t);
array_reduce() Iterativno zmanjša tabelo na eno samo končno vrednost s pomočjo lastne funkcije. echo array_reduce([1,2,3], function($c, $v){ return $c + $v; }, 0);
array_replace() Zamenja vrednosti v prvi tabeli z vrednostmi iz vseh naslednjih tabel z enakimi ključi. print_r(array_replace(["A", "B"], [0 => "X"])); // X zamenja A
array_replace_recursive() Rekurzivno zamenja vrednosti v prvi tabeli z vrednostmi iz naslednjih tabel (v globino). print_r(array_replace_recursive([["A"]], [["X"]]));
array_reverse() Vrne novo tabelo z popolnoma obrnjenim vrstnim redom elementov. print_r(array_reverse([1, 2, 3])); // Vrne [3, 2, 1]
array_search() Išče podano vrednost v tabeli in vrne pripadajoči ključ, če jo najde. echo array_search("BMW", ["a" => "Audi", "b" => "BMW"]); // b
array_shift() Odstrani in vrne popolnoma prvi element iz tabele (in premakne indekse). $t = [10, 20]; echo array_shift($t); // Izpiše 10
array_slice() Vrne varno izbrani del tabele (izrez) glede na odmik in dolžino. print_r(array_slice(["A", "B", "C", "D"], 1, 2)); // B, C
array_splice() Odstrani izbrane elemente iz tabele in jih po želji zamenja z novimi. $t = [1, 2, 3]; array_splice($t, 1, 1, [99]); print_r($t);
array_sum() Izračuna skupno vsoto vseh številskih vrednosti v tabeli. echo array_sum([10, 20, 30]); // Izpiše 60
array_udiff() Primerja tabele in vrne razliko vrednosti z uporabo lastne funkcije za primerjavo. print_r(array_udiff([2, 3], [3], function($a,$b){return $a-$b;}));
array_udiff_assoc() Primerja tabele in vrne razliko (ključe in vrednosti) z lastno funkcijo za vrednosti. print_r(array_udiff_assoc(["a"=>1], ["a"=>2], function($a,$b){return $a-$b;}));
array_udiff_uassoc() Primerja tabele in vrne razliko z uporabo dveh lastnih funkcij za ključe in vrednosti. print_r(array_udiff_uassoc([1], [1], "strcasecmp", "strcasecmp"));
array_uintersect() Primerja tabele in vrne ujemanja vrednosti z uporabo lastne funkcije za primerjavo. print_r(array_uintersect([1,2], [2], function($a,$b){return $a-$b;}));
array_uintersect_assoc() Primerja tabele in vrne ujemanja (ključe in vrednosti) z lastno funkcijo za vrednosti. print_r(array_uintersect_assoc(["a"=>1], ["a"=>1], function($a,$b){return $a-$b;}));
array_uintersect_uassoc() Primerja tabele in vrne ujemanja z uporabo dveh lastnih funkcij za ključe in vrednosti. print_r(array_uintersect_uassoc([1], [1], "strcasecmp", "strcasecmp"));
array_unique() Odstrani vse podvojene vrednosti iz tabele in ohrani samo edinstvene. print_r(array_unique([1, 2, 2, 3, 1])); // [1, 2, 3]
array_unshift() Doda enega ali več elementov na sam začetek tabele. $t = [2, 3]; array_unshift($t, 1); print_r($t);
array_values() Vrne vse vrednosti iz tabele in hkrati ponastavi ključe na številke od 0 naprej. print_r(array_values(["a" => "X", "b" => "Y"]));
array_walk() Uporabi uporabniško funkcijo za vsak posamezni element v tabeli. $t = [1, 2]; array_walk($t, function(&$v){ $v += 10; }); print_r($t);
array_walk_recursive() Rekurzivno uporabi lastno funkcijo za vsak element v tabeli (vključno s podtabelami). $t = [1, [2]]; array_walk_recursive($t, function($v){ echo $v; });
arsort() Razvrsti tabelo v padajočem vrstnem redu glede na vrednosti (ohrani ključe). $t = ["a"=>1, "b"=>5]; arsort($t); print_r($t);
asort() Razvrsti tabelo v naraščajočem vrstnem redu glede na vrednosti (ohrani ključe). $t = ["a"=>5, "b"=>1]; asort($t); print_r($t);
compact() Ustvari asociativno tabelo iz imen obstoječih spremenljivk in njihovih vrednosti. $ime = "Borut"; $rez = compact("ime"); print_r($rez);
count() Vrne skupno število vseh elementov v tabeli. echo count([1, 2, 3, 4]); // Izpiše 4
current() Vrne trenutni element v tabeli (tam, kjer se trenutno nahaja notranji kazalec). $t = ["A", "B"]; echo current($t); // A
end() Premakne notranji kazalec tabele na popolnoma zadnji element in ga vrne. $t = ["A", "B", "C"]; echo end($t); // C
extract() Uvozi ključe tabele kot prave spremenljivke v trenutni programski prostor. extract(["x" => 99]); echo $x; // Izpiše 99
in_array() Preveri, ali določena vrednost obstaja v tabeli (vrne true/false). var_dump(in_array("v", ["a", "v", "c"]));
key() Vrne ključ oziroma indeksno mesto trenutnega elementa v tabeli. $t = ["a" => 1, "b" => 2]; next($t); echo key($t); // b
krsort() Razvrsti asociativno tabelo v padajočem vrstnem redu glede na njene ključe. $t = ["a"=>1, "b"=>2]; krsort($t); print_r($t);
ksort() Razvrsti asociativno tabelo v naraščajočem vrstnem redu glede na njene ključe. $t = ["b"=>2, "a"=>1]; ksort($t); print_r($t);
list() Dodeli vrednosti iz tabele seznamu poljubno imenovanih spremenljivk. list($prvi, $drugi) = [10, 20]; echo $prvi; // 10
natcasesort() Razvrsti tabelo z uporabo naravnega algoritma (brez upoštevanja velikosti črk). $t = ["img12", "IMG2", "img1"]; natcasesort($t); print_r($t);
natsort() Razvrsti tabelo z uporabo naravnega algoritma človeškega štetja (z upoštevanjem črk). $t = ["slika10", "slika2", "slika1"]; natsort($t); print_r($t);
next() Premakne notranji kazalec tabele na naslednji element in ga vrne na zaslon. $t = [10, 20]; echo next($t); // Izpiše 20
pos() Vzdevek (alias) za funkcijo current(). Vrne trenutni element kazalca. $t = ["X", "Y"]; echo pos($t); // X
prev() Premakne notranji kazalec tabele na prejšnji element in ga vrne nazaj. $t = [10, 20]; next($t); echo prev($t); // 10
range() Ustvari avtomatsko tabelo, ki vsebuje določen obseg številk ali črk. print_r(range(1, 5)); // Ustvari [1, 2, 3, 4, 5]
reset() Ponastavi notranji kazalec tabele nazaj na popolnoma prvi element in ga vrne. $t = [1, 2, 3]; next($t); echo reset($t); // 1
rsort() Razvrsti elemente tabele v padajočem vrstnem redu in ji ponastavi numerične ključe. $t = [1, 3, 2]; rsort($t); print_r($t);
shuffle() Premeša vse elemente znotraj tabele v popolnoma naključen vrstni red. $t = [1, 2, 3, 4]; shuffle($t); print_r($t);
sizeof() Uradni vzdevek (alias) za funkcijo count(). Vrne število vseh elementov. echo sizeof([1, 2, 3]); // Izpiše 3
sort() Razvrsti elemente tabele v naraščajočem vrstnem redu in ji ponastavi ključe na številke. $t = [3, 1, 2]; sort($t); print_r($t);
uasort() Razvrsti tabelo z lastno primerjalno funkcijo in hkrati ohrani ključe. $t=["a"=>3,"b"=>1]; uasort($t, function($a,$b){return $a-$b;}); print_r($t);
uksort() Razvrsti tabelo po njenih ključih z uporabo lastne primerjalne funkcije. $t=["b"=>1,"a"=>2]; uksort($t, "strcasecmp"); print_r($t);
usort() Razvrsti tabelo po vrednostih z lastno funkcijo in ji ponastavi ključe na številke. $t=[3,1,2]; usort($t, function($a,$b){return $a-$b;}); print_r($t);