12. diel - Práca s poľom pomocou cyklov v PHP
V predchádzajúcom kvíze, Kvíz - Podmienky, boolean, switch a formuláre v PHP, sme si overili nadobudnuté skúsenosti z predchádzajúcich lekcií.
V minulej lekcii, Kvíz - Podmienky, boolean, switch a formuláre v PHP , sme sa naučili cykly for
a
while
. V dnešnom PHP tutoriálu cykly dokončíme a ukážeme si,
ako ich možno využiť pri práci s poľom.
Naplnenie poľa cyklom
Práve cykly sa často používajú pre automatizovanú prácu s poľami.
Položiek je v poli veľa a pracovať s nimi po jednej by určite nebol
najlepší nápad. Začnime naplnením pole číslami od 1
do
100
.
Chceme niečo 100x opakovať, počet opakovaní teda vieme a preto zvolíme
for
cyklus. Riadiaci premenná for cyklu ($i
) bude
nadobúdať hodnoty 0
až 99
, pretože vieme, že pole
o 100
položkách má indexy 0
- 99
.
Pretože chceme hodnoty v položkách od 1
do 99
,
musíme k indexu pripočítať jedničku:
$cisla = array(); for ($i = 0; $i < 100; $i++) $cisla[$i] = $i + 1;
Výpis poľa cyklom
Teraz máme v poli uložených 100 čísel. Podobné generovanie poľa sa zvyčajne v praxi veľmi nepoužíva, pretože hodnoty v ňom získame napr. Z databázy. S niečím ale pracovať musíme Čo už sa používa veľmi často je výpis hodnôt z poľa, napr. Do tabuľky.
Cyklus for
Určite by ste dali dokopy nasledujúci kód, ktorý by patril za kód vyššie uvedený:
{PHP}
$cisla = array();
for ($i = 0; $i < 100; $i++)
$cisla[$i] = $i + 1;
echo('<table border="1"><tr>');
for ($i = 0; $i < 100; $i++)
echo('<td>' . htmlspecialchars($cisla[$i]) . '</td>');
echo('</tr></table>');
{/PHP}
Kód vypíše pomocou cyklu for
obsah poľa do tabuľky. V poli
by v praxi nebola len vygenerovaná čísla, ale jednalo by sa napr. O
komentáre z databázy. K tým sa čoskoro dostaneme.
Cyklus foreach
K výpisu poľa sa však oveľa viac hodí zjednodušená verzia cyklu
for
, ktorou je foreach
. Zapisujeme ho takto:
foreach ($kolekcia as $prvok)
foreach
proiteruje všetky položky v poli a v premennej cykle
vždy vracia aktuálnu položku. To je rozdiel oproti cyklu for
,
ktorý v premennej cykle vracia index aktuálnej položky.
Výpis obsahu nášho poľa do tabuľky by sme pomocou foreach
napísali takto:
{PHP}
$cisla = array();
for ($i = 0; $i < 100; $i++)
$cisla[$i] = $i + 1;
echo('<table border="1"><tr>');
foreach($cisla as $cislo)
echo('<td>' . htmlspecialchars($cislo) . '</td>');
echo('</tr></table>');
{/PHP}
Výstup programu bude identický. foreach
slúži najmä pre
čítanie alebo pre prácu s objektmi (tie zatiaľ ešte nepoznáme), kde je
prehľadnejšie, než cyklus for
.
Premenná cyklu obsahuje v príklade vyššie kópiu prvku na aktuálnu
pozíciu pole. Ak by sme sa pokúsili v cykle premennú $cislo
modifikovať, nemalo by to na pole žiaden vplyv, pretože by sme zmenili len
kópiu daného prvku a nie prvok samotný. Ak by sme chceli napr. Všetky prvky
v poli vynásobiť dvomi, musíme použiť for
:
for ($i = 0; $i < 100; $i++) $cisla[$i] = $cisla[$i] * 2;
Často ale chceme napr. Len dvojnásobky vypísať, nie meniť pôvodné
pole. K tomu by nám foreach
stačil.
PHP funkcie pre prácu s poľom
PHP pre prácu s poľami ponúka množstvo hotových funkcií. Nebudeme je popisovať nijako podrobne, len si uvedieme zoznam tých najdôležitejších. Každá funkcia odkazuje na český PHP manuál, kde je popísaná vrátane príkladu. Vždy, než začneme v PHP niečo programovať, je dobré sa pozrieť, či na to už nemáme k dispozícii nejakú funkciu. Jednak si ušetríme prácu, vyvarujeme sa chybám, ktoré by sme mohli urobiť a hlavne vstavané PHP funkcie sú programovanej v céčku a sú teda z hľadiska výkonu úplne niekde inde.
Určite nemusíte funkcie teraz skúmať, len si prečítajte, čo ktorá robí a keď to budete v budúcnosti potrebovať, vyhľadáte si ju.
array_fill | Naplní pole hodnotami. |
array_flip | Otočí kľúče a hodnoty v poli. |
array_intersect_key | Vráti pole, ktorého kľúče sú prienikom kľúčov dvoch polí. |
array_intersect | Vráti pole, ktoré je prienikom hodnôt zadaných polí. |
array_keys | Vráti pole kľúčov zo zadaného poľa. |
array_map | Aplikuje callback (funkciu) na všetky prvky v poli. |
array_merge | Spojí niekoľko polí do jedného. |
array_pop | Umožňuje používať polia ako zásobník, odoberie posledný prvok. |
array_push | Umožňuje používať polia ako zásobník, vloží prvok za posledný prvok. |
array_reverse | Prevráti hodnoty v poli. |
array_search | Vyhľadá v poli daný prvok. |
array_shift | Umožňuje používať poľa ako front, odoberie prvý prvok. |
array_sum | Vráti súčet hodnôt v poli. |
array_unique | Odstráni duplicitné hodnoty v poli. |
array_unshift | Umožňuje pole používať ako front, pridá prvý prvok. |
array_values | Vráti pole všetkých hodnôt z daného poľa. |
count | Spočíta prvky v poli, prípadne v objekte. |
extract | Rozbalí premenné z poľa do súčasného scope. |
ksort | Zoradí pole podľa kľúčov. |
sort | Zoradia hodnoty v poli od najmenších po najväčšie. |
Ak vás napadlo, či môžu byť položky poľa samy poľom, tak to ide. Pole je dátový typ ako každý iný a do poľa môžeme vložiť aj niekoľko polí. Veľmi často budete pracovať s poľom, ako je toto:
$pavel = array( 'jmeno' => 'Pavel Novák', 'vek' => '20', ); $tomas = array( 'jmeno' => 'Tomáš Márny', 'vek' => '50', ); $jana = array( 'jmeno' => 'Jana Nová', 'vek' => '35', ); $lide = array($pavel, $tomas, $jana);
Vytvoríme si 3 polia a tieto polia vložíme do jedného poľa ako jeho hodnoty. Vnútorné pole predstavujú jednotlivé ľudí, vonkajší je obaľuje, aby sme s nimi mohli jednoducho hromadne pracovať a treba ich vypísať.
Presne takéto pole vám vráti nejaký databázový dotaz pre výber používateľov, len by asi bolo meno a priezvisko zvlášť. Vypísať by ste ho už mali vedieť, pre istotu si to uveďme:
{PHP}
$pavel = array(
'jmeno' => 'Pavel Novák',
'vek' => '20',
);
$tomas = array(
'jmeno' => 'Tomáš Márny',
'vek' => '50',
);
$jana = array(
'jmeno' => 'Jana Nová',
'vek' => '35',
);
$lide = array($pavel, $tomas, $jana);
echo('<table border="1">');
echo('<tr><th>Meno</th><th>Vek</th></tr>');
foreach ($lide as $clovek)
{
echo('<tr><td>' . htmlspecialchars($clovek['jmeno']) . '</td>');
echo('<td>' . htmlspecialchars($clovek['vek']) . '</td></tr>');
}
echo('</table>');
{/PHP}
O takýchto poliach sa často hovorí ako o viacrozmerných. A to najmä
vtedy, keď sa jedná napr. O pole čísel. Takéto pole si potom môžeme
predstaviť ako tabuľku (maticu). Pole 3
x 3
by sme
mohli vytvoriť napr. Nasledovne:
$matice = array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9) );
Väčšia poľa by sme samozrejme vytvárali cyklom. Vypisovať a pracovať s
poľom budeme pomocou 2 vnorených for
cyklov, ako sme to robili u
malej násobilky. Ukážme si ako by vyzeral výpis poľa vyššie:
{PHP}
$matice = array(
array(1, 2, 3),
array(4, 5, 6),
array(7, 8, 9)
);
echo('<table border="1">');
for ($j = 0; $j < 3; $j++)
{
echo('<tr>');
for ($i = 0; $i < 3; $i++)
{
echo('<td>' . $matice[$j][$i] . '</td>');
}
echo('</tr>');
}
echo('</table>');
{/PHP}
výsledok:
Prakticky som takéto 2D poľa použil napr. V online riešiaca sudoku. V budúcej lekcii, Riešené úlohy k 12. lekcii PHP , dokončíme úplné základy PHP, uvedieme si funkcie pre prácu s textovými reťazcami a naučíme sa deklarovať vlastné funkcie. Dnešné príklady sú ako vždy na stiahnutie nižšie.
V nasledujúcom cvičení, Riešené úlohy k 12. lekcii PHP, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 565x (1.88 kB)
Aplikácia je vrátane zdrojových kódov v jazyku php