Asociatívne pole
Spomeňte si na kapitolu jazyka PHP, v ktorej sme si predstavili dátový typ pole (array). Ako už vieme, je to typ premennej, ktorý môže obsahovať ľubovoľný počet iných premenných. Tieto premenné sú uložené v premennej typu array zaradom, kde každá z nich má nejaký svoj index – poradové číslo a pomocou tohto indexu vieme k danej premennej pristupovať. Aj preto sa volá tento typ poľa indexované pole (indexed array), pretože sú jeho prvky reprezentované svojim indexom ($pole[$index]).
Typ array si využíva vo veľa smeroch, najčastejšie však pri práci s tabuľkou formou. Tabuľka má v podstate dva rozmery – riadky a stĺpce a táto forma sa dá reprezentovať úplne presne dvojrozmerným poľom, kde prvý rozmer určuje napríklad stĺpce a druhý jednotlivé položka (hodnoty v riadkoch). Pri tejto reprezentácii sú však jednotlivé stĺpce reprezentované indexom – číslom. V praxi však majú stĺpce vo väčšine nejaký svoj názov – tvoria hlavičku tabuľky, tak isto ako to máme aj v databázach.
Aj pre toto existuje v jazyku PHP ešte druhý typ polí a práve s týmto typom sa budeme častejšie stretávať najmä pri práci s databázou. Pri asociatívnom poli totižto prvok nie je uložený pod číselným indexom (číslo od 0), ale pod stringovým (slovo). Pole tohto typu sa nazýva asociatívne pole, kde asociatívny sa myslí pridružený/priradený, pretože daný prvok je priradený v poli pod daným slovom. Aby sme lepšie pochopili, o čom sa tu bavíme, pozrime si túto ukážku kódu, ktorú si odskúšajte stále v súbore index.php za pripojenie do databázy:
index.php (za spojenie s DB):
//polia
$indexed_array[] = "Janko Mrkvicka";
$indexed_array[] = "Charlie Harper";
$indexed_array[] = "Alf";
echo "<br><br>Prvok 1 z pola indexed_array: ".$indexed_array[0]."<br>";
echo "Prvok 2 z pola indexed_array: ".$indexed_array[1]."<br>";
echo "Prvok 3 z pola indexed_array: ".$indexed_array[2]."<br>";
echo '<pre>';
print_r($indexed_array);
echo '</pre>';
//asociativne pole
$associative_array['Meno_1'] = "Janko Mrkvicka";
$associative_array['Meno_2'] = "Charlie Harper";
$associative_array['Meno_3'] = "Alf";
echo "<br><br>Prvok 1 z pola associative_array: ".$associative_array[Meno_1]."<br>";
echo "Prvok 2 z pola associative_array: ".$associative_array[Meno_2]."<br>";
echo "Prvok 3 z pola associative_array: ".$associative_array[Meno_3]."<br>";
echo '<pre>';
print_r($associative_array);
echo '</pre>';
Ako vidíte na ukážke, v prvej časti si vkladáme do indexovaného poľa postupne tri hodnoty bez zadania indexu, ktaže sa nám hodnoty automaticky vkladajú od indexu 0. Následne si vypisujeme jednotlivé hodnoty v troch riadkoch, kde pre výpis (a celkovo prístup) zadáme do hranatých zátvoriek iba číslo indexu a tým sa dostaneme k danému prvku. Následne sme obsah poľa dali vypísať aj pomocou príkazu print_r, ktorý sme obalili do prvku html PRE, aby sme lepšie videli reprezentáciu poľa v počítači. Je vidieť, že prvky (hodnoty) sú uložené v poli zaradom pod číselným indexom.
V druhej časti si vkladáme prvky do asociatívneho poľa. Ako vidíte, vkladanie (priraďovanie) sa vykonáva tým, že do hranatých zátvoriek vkladáme rovno stringové indexy pre dané prvky a rovnakým spôsobom aj k prvkom následne vo výpise pristupujeme. Pro asociatívnom poli nie je možné vkladať prvky ako v prvom prípade ($pole[]=...), keďže chceme, aby prvky boli uložené pod stringovým indexom, počítač ho musí vedieť, čiže ho muísme zadať. Následne vo výpise cez príkaz print_r je jasne vidieť, že prvky sú v tomto poli uložené pod danými stringovými indexami.
Na čo je ale takéto pole dobré? Ak si spomeniete na to, ako sme vypisovali všetky prvky poľa, tak sme to robili najčastejšie pomocou cyklu s pevne daným počtom opakovaní (FOR), kde sa index cyklu zvyšoval o jedna a tým pádom sme postupne prešli všetky prvky poľa až po jeho dĺžku (length), pretože index poradového kroku cyklu bol v podsate aj index prvkov v poli. V tomto prípade by nám to však nepomohlo, pretože by sme potrebovali presne vedieť, pod akými indexami sú prvky v poli uložené.
K výpisu takéhoto poľa sa dostaneme o chvíľu, ešte si povieme jeden dôvod, prečo sme si to prebrali práve teraz. Možno tušíte, že to bude súvisieť s databázami a máte pravdu. Totižto pri zavolaní SELECTu na databázu dostávame v odpovedi dáta presne v tejto dátovej štruktúre – v asociatívnom poli. Prečo je to tak? Odpoveď je jednoduchá. Prvé indexy takého poľa sú práve názvy stĺpcov tabuľky, ktoré sa vo väčšine vypisujú v hlavičke tabuľky (th) a následne pod každým z týchto indexov (stĺpcov tabuľky v DB) je uložené indexované pole, kde sú prvky v poli uložené pod číselným indexom, kde daný index reprezentuje práve poradové číslo riadka v tabuľke. Takto jednoducho, pomocou indexovaného poľa v asociatívnom poli vieme dostať, resp. sformulovať celý obsah (dáta) tabuľky v databáze. V nasledujúcej prednáške si to už aj vyskúšame.