IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Pole - Český PHP manuál

V tomto článku si vysvětlíme, k čemu pole slouží a jak s polem v PHP pracovat různými způsoby.

Pole

Pole je datový typ a obecně slouží k uložení více hodnot stejného typu, které spolu nějak logicky souvisí. Pomocí pole můžeme mít v proměnné např. obsah 30ti textových polí, aniž bychom museli zakládat proměnné $text1, $text2, $text3... až $text30. Založíme pouze jedno pole. To si můžeme představit jako přihrádky v paměti, kde je v každé přihrádce jeden prvek pole. Pole založíme pomocí klíčového slova array:

<?php
$pole = array();

Od PHP 5.4 a vyšší postačí pouze:

<?php
$pole = [];

V proměnné $pole je nyní prázdné pole. Založit můžeme samozřejmě pole již s nějakými hodnotami, jednoduše je zapíšeme do závorky a oddělíme čárkami:

<?php
$barvy = array('červená', 'zelená', 'žlutá', 'fialová');

K prvkům pole přistupujeme přes hranatou závorku (tzv. indexer). Takto založené pole je tzv. číselně indexované. Prvky jsou číslovány od nuly a přistupujeme k nim pomocí indexů:

<?php
$barvy = array('červená', 'zelená', 'žlutá', 'fialová');
echo $barvy[2];

Výstup:

žlutá

PHP je interpretovaný jazyk a proto si může dovolit poskytnou programátorovi vysoký komfort. Pro začátek si řekněme, že pole v PHP jsou "nafukovací". Nemají pevnou velikost, můžeme do nich prvky libovolně přidávat:

<?php
$barvy = Array('červená', 'zelená', 'žlutá', 'fialová');
$barvy[] = 'bílá';

Prázdné závorky odkazují na další index do pole, který v něm ještě není. Takto do něj můžeme zapsat další prvek. [] ukazuje vždy na index o jednu větší než všechny indexy v poli:

<?php
$barvy[6] = 'modrá';
$barvy[4] = 'zelená';
$barvy[] = 'žlutá';
print_r($barvy);

Výstup:

Array
(
    [6] => modrá
    [4] => zelená
    [7] => žlutá
)

Také víme, že PHP neexistující proměnnou po přiřazení založí. Pole tedy nemusíme ani deklarovat (i když to není nejvhodnější nápad) a stačí prvky uložit:

<?php
$barvy[0] = 'červená';
$barvy[1] = 'zelená';
$barvy[2] = 'žlutá';
$barvy[3] = 'fialová';

Indexy si nyní musíme hlídat manuálně. Pole si můžeme vypsat pomocí funkce print_r($barvy), vypadá takto:

Array
(
    [0] => červená
    [1] => zelená
    [2] => žlutá
    [3] => fialová
)

Iterace prvky pole

Asi bychom všichni uměli prvky v poli vypsat (nebo nějak zpracovat). Možná by nás napadl podobný postup:

<?php
$barvy = array('červená', 'zelená', 'žlutá', 'fialová');
echo $barvy[0] . ' ' . $barvy[1] . ' ' . $barvy[2] . ' ' . $barvy[3];

Toto jistě není nejchytřejší způsob, co kdyby pole mělo tisíc prvků? Použijeme foreach cyklus, který projede všechny prvky pole:

<?php
$barvy = Array('červená', 'zelená', 'žlutá', 'fialová');
foreach ($barvy as $barva)
{
    echo $barva . ' ';
}

Výstup:

červená zelená žlutá fialová

Do pole si můžeme samozřejmě ukládat cokoli, může jít o textové řetězce, čísla i objekty.

Reference

Je nutné zmínit, že celá pole a i prvky pole v foreach cyklu se předávají jako kopie, nikoli referencí. To může být nezvyklé a také to může zapříčinit problémy se změnou jejich hodnoty, pokud je předáváme v parametru funkce nebo s nimi pracujeme v cyklu. Tento kód nebude fungovat:

<?php
// Tento kód nebude fungovat

$pole = array(1, 2, 3);
foreach ($pole as $prvek)
{
    $prvek = 1;
}

print_r($pole);

Ačkoli to může vypadat, že jsme nastavili všechny prvky pole na samé jedničky, pole se vůbec nezměnilo. Prvek, do kterého jsme přiřazovali, byl totiž pouhou kopií prvku z pole. Referenci na prvek (nebo pole) si vynutíme pomocí znaku '&':

<?php
$pole = array(1, 2, 3);
foreach ($pole as &$prvek)
{
    $prvek = 1;
}

print_r($pole);

Nyní vše funguje tak, jak má. Obdobná situace by nastala při předání pole funkci:

<?php
function zmenPole($pole)
{
    $pole[0] = 3;
}

$pole = Array(1, 2, 3);
zmenPole($pole);
print_r($pole);

Opět se nic nezmění, celé pole se před předáním funkci zkopíruje a změníme pouze jeho kopii, která se poté zahodí. Vyřešit to můžeme buď tím, že vrátíme kopii pole z funkce a tou zas nahradíme naše původní pole. Nebo můžeme použít referenci (to mi přijde vzhledem ke konvencím z dalších programovacích jazyků logičtější):

<?php
function zmenPole(&$pole)
{
    $pole[0] = 3;
}

$pole = Array(1, 2, 3);
zmenPole($pole);
print_r($pole);

Typy prvků

Další specialitou dynamického PHP je to, že každý prvek v poli může být jiného typu a některé prvky (indexy) v poli být dokonce ani nemusí:

<?php
$pole[2] = "Text";
$pole[3] = 12;
$pole[8] = Array("Vnořené pole", 8);
print_r($pole);

Výstup:

Array
(
    [2] => Text
    [3] => 12
    [8] => Array
        (
            [0] => Vnořené pole
            [1] => 8
        )

)

O dalším využití pole pojednává článek asociativní a vícerozměrná pole.


 

Všechny články v sekci
Pole - Český PHP manuál
Článek pro vás napsal David Hartinger
Avatar
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 se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity