PHP (7) - Pole

PHP používá samozřejmě i proměnné typu pole. Dnes si ukážeme jak.

4.6.2004 15:00 | Petr Zajíc | přečteno 182071×

V PHP je kromě základních datových typů (celá čísla, desetinná čísla, logické hodnoty a řetězce) k dispozici i datový typ pole. To je speciální struktura, která může v jedné proměnné obsahovat sadu hodnot. Hovoříme o tom, že pole má prvky; každý prvek má index nebo klíč a hodnotu. Proměnné typu pole patří k těm věcem v PHP, které jsou v jazyce zpracovány opravdu dobře a znalost polí Vám pravděpodobně umožní napsat kód, který by bez nich byl delší, nebo pomalejší, nebo méně přehledný.

Představte si, že máte dejme tomu pět lidí stojících ve frontě. Z těchto lidí můžete udělat v PHP pole například tak, že jako index bude sloužit jejich "frontové pořadí". Můžete tedy napsat:

<?
$fronta
[1]="Petr";
$fronta[2]="Pavel";
$fronta[3]="Maruška";
$fronta[4]="Eva";
$fronta[5]="LinuxSoft tým";
?>

Vznikla nám proměnná $fronta (pole), která obsahuje pět prvků, z nichž každý má svůj index (například trojku) a hodnotu (takže Maruška). Z toho vidíme, že pole se v PHP zapisují jako každá jiná proměnná, pouze za názvem mají v hranatých závorkách index.

Indexovaná a asociativní

Pole uvedené výše bylo indexované, protože jeho prvky jsou určeny indexem. Někdy může ale být šikovnější rozlišit od sebe prvky pole řetězcem, čímž vznikne tzv. asociativní pole.

<?
$obyvatel
["Praha"]=1000000;
$obyvatel["Ústí nad Labem"]=100000;
$obyvatel["Horní Lhota"] = 350;
?>

Obecně může být asociativní pole užitečné v případě, kdy budete chtít rozlišovat prvky podle něčeho jiného než podle čísel. Například existují projekty, kde se asociativní pole používají k ukládání konfiguračních hodnot programu. Proměnná $config["max_users"] je daleko popisnější než $config[5].

Vícerozměrná pole

Aby to nebylo tak úplně jednoduché, pole nemusí mít jen jeden index. Představte si například, že byste v PHP chtěli pomocí pole popsat postavení figurek na šachovnici před zahájením šachové partie. Protože figurky nestojí v jedné frontě jako lidé v našem prvním příkladu, ale jsou naopak uspořádány na hrací ploše rozdělené do řad a sloupců, můžete udělat něco jako:

<?
//[řádek] [sloupec] (zleva odspodu)
$figura[1][1]="bílá věž";
$figura[1][2]="bílý jezdec";
//...atd...
$figura[2][8]="bílý pěšec";
//...atd...
$figura[8][7]="černý jezdec";
$figura[8][8]="černá věž";
?>

za což mě pochopitelně žádný šachista nemůže mít rád, protože v šachové notaci se uvádí nejprve sloupec a pak řádek a navíc sloupce se nečíslují, ale označují se písmeny. Abychom demonstrovali pružnost PHP při práci s poli a umlčeli nespokojené šachisty, přepíšeme to do následující podoby:

<?
$figura
["a"][1]="bílá věž";
$figura["b"][1]="bílý jezdec";
//...atd...
$figura["h"][2]="bílý pěšec";
//...atd...
$figura["g"][8]="černý jezdec";
$figura["h"][8]="černá věž";
echo
"Na poli b1 je při zahájení šachové partie ".$figura["b"][1];
?>

Inicializace pole

Pole v programu samozřejmě nevznikne samo od sebe. Můžeme jej nastavit tak, že jeho prvkům přiřadíme postupně hodnoty. To bylo patrné ze všech předchozích ukázek. Jde to ovšem ještě jednodušeji - index pole můžeme vynechat a PHP jej dosadí za nás. Další možnost je použít PHP funkci array, která provede totéž, ale je to mnohem kratší. Úvodní příkaz z frontou bychom tedy mohli přepsat následovně:

<?
$fronta
[]="Petr";
$fronta[]="Pavel";
$fronta[]="Maruška";
$fronta[]="Eva";
$fronta[]="LinuxSoft tým";
?>

nebo pomocí funkce array, což je ještě kratší:

<?$fronta=Array("Petr", "Pavel", "Maruška", "Eva", "LinuxSoft tým");?>

Je tu nicméně jeden problém. PHP standardně čísluje pole od nuly, ne od jedničky. Takže, v našem příkladu by $fronta[1] vrátilo "Pavel", ne "Petr". Aby příklad skutečně fungoval jako ten úvodní, musíme PHP s inicializací pole trochu pomoci - prozradíme, že nechceme číslovat od nuly, ale od jedničky.

<?
// buď tedy
$fronta[1]="Petr";
$fronta[]="Pavel";
$fronta[]="Maruška";
$fronta[]="Eva";
$fronta[]="LinuxSoft tým";

//nebo
$fronta=Array(1=>"Petr", "Pavel", "Maruška", "Eva", "LinuxSoft tým");
?>

Pro vypsání obsahu pole se Vám může, zejména při ladění kódu hodit šikovná funkce print_r. Ta prostě vypíše obsah pole do prohlížeče. Funguje i s vícerozměrnými poli.

Pozn: Ona vlastně funguje i s čísly a řetězci. Ale používá se převážně pro pole.

K čemu  se pole používají

Protože se pole v PHP dají využít na všechno možné, dovolím si krátký přehled toho, k čemu by se Vám mohla hodit. Třeba budete řešit situaci, kdy použití polí může být to "pravé ořechové". Pole mohou:

Postřehy k polím

To, že jsou pole v PHP užitečná ještě neznamená, že by se měla používat vždy a všude. Tady jsou postřehy, které možná oceníte:

S poli se dá dělat mnoho věcí. PHP ale obsahuje hodně důležitých rysů, na které bychom se měli podívat ještě předtím, než budeme zkoušet pracovat s poli. V dalším díle seriálu se proto podíváme na výrazy, operace a přetypování proměnných.

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=179