IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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 099, 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ý:

echo('<table border="1"><tr>');
for ($i = 0; $i < 100; $i++)
    echo('<td>' . htmlspecialchars($cisla[$i]) . '</td>');
echo('</tr></table>');

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:

echo('<table border="1"><tr>');
foreach($cisla as $cislo)
    echo('<td>' . htmlspecialchars($cislo) . '</td>');
echo('</tr></table>');

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_intersec­t_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.
Pole polí

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:

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>');
Tvoja stránka
localhost

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:

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>');

výsledok:

Tvoja stránka
localhost

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

 

Predchádzajúci článok
Kvíz - Podmienky, boolean, switch a formuláre v PHP
Všetky články v sekcii
Základné konštrukcie jazyka PHP
Preskočiť článok
(neodporúčame)
Riešené úlohy k 12. lekcii PHP
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity