Explode slouží k snadnému rozdělení řetězce podle oddělovače.
Podpora | PHP 4 a novější |
---|---|
Stručný popis | Rozdělení řetězce do pole podle oddělovače. |
Požadavky | Žádné |
Poznámka | Nelze vložit pole, jen řetězec. |
Často potřebujeme rozdělit řetězec podle nějakého jednoduchého pravidla. Třeba seznam čísel oddělených čárkou.
Na to se výborně hodí funkce explode(), která prvním parametrem přijímá separátor (rozdělující řetězec) a druhým parametrem samotná data:
$cisla = '3, 1, 4, 1, 5, 9';$parser = explode(', ', $cisla);foreach ($parser as $cislo) {echo $cislo . '<br>';// Tady můžeme čísla dále zpracovat}
Co když ale budou čísla oddělena čárkou, ale kolem budou různě mezery?
Řešení je parsování podle nejmenšího společného podřetězce a následné odstranění nechtěných znaků kolem (mezery a jiné bílé znaky):
$cisla = '3, 1,4, 1 , 5 ,9';$parser = explode(',', $cisla);foreach ($parser as $cislo) {echo trim($cislo) . '<br>';// Tady můžeme čísla dále zpracovat}
Funkce trim()
v tomto případě elegantně odstraní bílé znaky kolem (mezery, tabulátory, konce řádků, ...), čímž dostaneme jen čistá data.
TIP: Na mnoho příkladů se explode() nehodí a je mnohem lepší použít regulární výrazy.
Často ovšem chceme data parsovat jen do určité vzdálenosti, k tomu lze omezeně použít třetí (nepovinný) parametr limit.
Mějme například strukturovaná data oddělená dvojtečkou, u kterých chceme získat obsah za první dvojtečkou a další dvojtečky ignorovat. Příklad:
$cas = 'format: "j.n.Y - H:i"';
Kdybychom řetězec parsovali pouze jako:
$parser = explode(':', $cas);
Získali bychom tyto 3 podřetězce (v jiných případech by jich mohlo být mnohem více):
'format'' "j.n.Y - H''i"'
Proto do parseru nastavíme limit, kolik prvků získat (a případně všechny další budou připojeny na konec posledního prvku):
$parser = explode(':', $cas, 2);// vrátí:echo $parser[0]; // formatecho $parser[1]; // "j.n.Y - H:i"
Poznámka: Nechtěné uvozovky lze z řetězce odmazat například funkcí
trim()
:
echo trim($parser[1], '"'); // druhý parametr uvádí mapu znaků k odstranění
Často potřebujeme získat řetězec, který je ohraničen dvěma jinými řetězci. Přímo v PHP na to žádná funkce neexistuje, ale můžeme si jí napsat sami:
function between(string $left, string $right, string $data): string{$l = explode($left, $data);$r = explode($right, $l[1]);return $r[0];}
Mnohem elegantnějšího rozdělování a práci s řetězci lze dosáhnout za pomoci regulárních výrazů, které probírám na samostatné stránce.
$ip = '10.0.0.138';$parser = explode('.', $ip);echo $parser[0]; // vypíše "10"echo $parser[1]; // vypíše "0";
V proměnné $ip
je vstupní řetězec, který je parsován podle oddělovače .
, návratem je pole. Parsování probíhá až do konce řetězce, pokud není stanoven limit.
# | Typ | Popis |
---|---|---|
1 | string | Oddělovací řetězec. |
2 | string | Parsovaný řetězec. |
3 | int | Limit parsování. Jedná se o nepovinný parametr. Příklad: |
$text = 'PHP je můj nejoblíbenější jazyk!';$parser = explode(' ', $text, 1);echo $parser[0]; // vypíše první slovoecho $parser[1]; // vypíše zbytek textuecho $parser[2]; // nevypíše nic, protože byl nastaven limit!
Návratem je pole s rozparsovaným řetězcem.
Indexy jsou číslovány od nuly až po X
, pokud není určen limit.
Verze PHP | Popis |
---|---|
5.1.0 | Byla přidána podpora záporného limitu při pasování. |
4.0.1 | Přidán nepovinný parametr limit. |
Při použití záporného limitu se uvede počet prvků od konce řetězce.
Příklad:
$str = 'one|two|three|four';// kladný limitprint_r(explode('|', $str, 2));// záporný limit (od PHP 5.1)print_r(explode('|', $str, -1));
Návratem budou následující pole:
Array([0] => one[1] => two|three|four)Array([0] => one[1] => two[2] => three)
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Nabízím trénink vývojářů, konzultace, školení a analýzu návrhových vzorů. Osobně v Praze nebo online.
Napište mi, pokud si nevíte rady.
Lektor: Jan Barášek
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | cs