11. Pole v PHP

Pole si můžeme představit jako množinu dat, které vzájemně nějak souvisí. Například abeceda, skupina čísel, názvy ovoce, skupina žáků ve třídě apod. Jedná se o prostředek pro hromadné zpracování dat. Jinak řečeno, pole je místem, do kterého můžeme uskladnit libovolné množství dat. A to do slova.

Vytváření pole

Pole se vytváří za pomoci konstrukce array. Příklad:

<?php
  $cisla = array(1,2,3);
  // Vytvoření pole, do kterého budou uložena tři čísla: jednička, dvojka a trojka.
  var_dump($cisla);
  // Vypsání celého pole. Výpis bude vypadat takto: // array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
?>

V poli můžeme používat i různé kombinace datových typů, např. místo dvojky můžete vložit text „dvojka“ (vyzkoušejte si to).

Práce se záznamy v poli

Se záznamy v poli se dá různě pracovat.

1. Sečtení počtu záznamů v poli

Pro sečtení celkového počtu záznamů v poli existuje jednoduchá funkce count. Příklad:

<?php
  $pole = array(10,20,30,40);
  // Vytvoření pole, do kterého budou uložena čtyři čísla
  $pocet = count($pole);
  // Funkce count zde zjišťuje počet údajů v poli $pole. Protože pole $pole obsahuje čtyři údaje, funkce count vrátí čtyřku. Proměnná $pocet tedy bude obsahovat čtyřku.
   echo $pocet;
 // Vypíše: 4
?>

Tato funkce se velmi často používá. Příklad – vypsání celkového počtu záznamů v návštěvní knize, celkový počet záznamů ve fotogalerii apod.

2. Hledání v poli

Aby bylo možné se záznamy v poli pracovat, je nutné, aby byl každý záznam nějak identifikovatelný (každý záznam má své pojmenování). To se děje vlastně automaticky a to tak, že každý ze záznamů má podle toho jak byl do pole uložen své pořadí. V PHP tomu říkáme index. Pořadí či index je v PHP (ale i v jiných prog. jazycích) počítáno od nuly. Tedy první záznam má index nula druhý jedna, třetí dva atd... Příklad:

$pole = array(10,20,30,40);
//desítka má index nula, dvacítka má index jedna, třicítka má index dva…

Pro práci s indexi používá PHP hranatých závorek. Např. – [2] (klávesová zkratka pravý Alt+F a G)

Příklad:

<?php
  $pole = array(10,20,30,40);
  // Vytvoření pole, do kterého budou uložena čtyři čísla
  var_dump($pole[1]);
  // Vypíše: int(20),
?>

3. Změny záznamů v poli

Velmi jednoduchým způsobem můžeme také jednotlivé záznamy v poli měnit. Příklad:

<?php
  $pole = array(1,2,3,4,5);
  // Vytvoření pole, ve kterém bude uloženo pět čísel. Jednička má index nula, dvojka má index jedna, trojka má index dva, čtyřka mí index tři a pětka má index čtyři.
  var_dump($pole);
 // Vypíše celé array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
 echo '<br>';
 //další záznamy budou na novém řádku
 $pole[3] = 10;
 // Změna prvku v poli, který má index tři. Na tomto indexu byla původně čtyřka, teď jsme tam uložili namísto ní desítku. Pole teď vlastně obsahuje čísla: 1,2,3,10,5.
  var_dump($pole);
  // Vypíše array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(10) [4]=> int(5) }
?>

4. Přidávání nových prvků do pole

Pokud do pole potřebujeme přidat nový záznam, máme k dispozici dva způsoby – přidání nového záznamu automaticky, tedy na konec pole nebo tak, že rovnou napíšeme, jáký index záznamu dáváme. Příklad, kdy vytváříme nový index 2 a do něj vkládáme hodnotu 30:

<?php
  $pole = array(1 => 20, 3 => 40, 6 => 70);
  // Vytvoření pole, ve kterém budou uložena tři čísla
  echo $pole[1];
  // Vypíše: 20, protože index 1 má číslo 20
 $pole [2] = 30;
 // Vytvoření záznamu s indexem 2 a vložení čísla 30 do tohoto indexu
 var_dump ($pole);
 // Vypíše: 20array(4) { [1]=> int(20) [3]=> int(40) [6]=> int(70) [2]=> int(30) }
?>

Všimněte si, že nový záznam je vypsán až jako poslední i když to neodpovídá číselné posloupnosti.

Druhým způsobem je vkládání nového záznamu bez udání indexu. Stačí vložit jen prázdné hranaté závorky:

<?php
$pole = array(1 => 20, 3 => 40, 6 => 70);
  // Vytvoření pole, ve kterém budou uložena tři čísla
echo $pole[1];
// Vypíše: 20, protože index 1 má číslo 20
$pole [] = 30;
// Vytvoření záznamu s indexem 7 a vložení čísla 30 do tohoto indexu
var_dump ($pole);
// Vypíše: 20array(4) { [1]=> int(20) [3]=> int(40) [6]=> int(70) [7]=> int(30) }
?>

V tomto případě se PHP podívá na největší existující index a nově vkládanému přiřadí index o číslo větší. Tedy v tomto případě 7.

5. Ovlivňování indexů

Indexy v poli můžeme i my sami ovlivnit a to zápisem:

index => hodnota

PHP neklade žádná omezení, indexy můžete tvořit i napřeskáčku. Např.:

<?php
$pole = array(7 => 20, 6 => 30);
// Vytvoření pole, ve kterém budou uložena dvě čísla, a to dvacítka a třicítka.
// Index 5 má dvacítka a index 6 má třicítka.
echo $pole[6];
// Vypíše: 30
?>

6. Řetězce jako indexy

Indexy můžeme mít i v podobě textových řetězců. Příklad:

<?php
$pole = array('jednička' => 1, 'dvojka' => 2);
// Vytvoření pole, ve kterém budou uložena dvě čísla, a to jednička a dvojka. 
// Index 'jednička' má uloženo číslo 1 a index 'dvojka' má uloženo číslo 2. 
echo $pole['jednička'];
// Vypíše: 1
?>

Mezi indexem pro který je použito celé číslo a indexem, pro nějž je použit řetězec není v principu (z hlediska práce s ním) žádný rozdíl.

7. Procházení polí

Pro procházení polí se používá většinou funkce foreach. Existují ještě jiné funkce, ale ty se používají jen velmi zřídka (např. next() a prev()). Funkce (nebo také konstrukce) foreach je vlastně cyklus, který prochází všemi prvky pole a pro každý z nich provede nějakou činnost. Např. jej vypíše. Zjednodušeně to vypadá takto:

foreach (pole as proměnná_pro_každý_prvek_pole)
  příkaz_který_se_provede_pro_každý_prvek_pole;

Ve skutečnosti to vypadá následovně:

<?php
$pole = array(1,2,3);
// Vytvoření pole, které obsahuje tři čísla.
foreach ($pole as $hodnota)
echo 'Nalezen prvek s hodnotou: ',$hodnota,'<br>';
// Konstrukce foreach, která prochází pole $pole a hodnotu každého prvku tohoto pole vypíše.
?>

Této konstrukci říkáme procházení bez indexu. Další variantou je procházení s indexem. Ke stávajícímu příkladu vlastně jen přidáme požadavek na výpis indexu:

<?php
 $pole = array(1,2,3);
 // Vytvoření pole, které obsahuje tři čísla.
 foreach ($pole as $index => $hodnota)
 echo 'Nalezen prvek s indexem: ',$index,', hodnota: ',$hodnota,'<br>';
// konstrukce foreach, která prochází pole $pole a vypíše jak index daného prvku, tak jeho hodnotu
?>

Pozn.: proměnná $index může mít jakýkoliv název, tedy ne zrovna „index“. To stejné platí pro proměnnou „hodnota“.