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 182707×
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.
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].
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];
?>
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.
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:
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.