Explode sa používa na jednoduché rozdelenie reťazca pomocou oddeľovača.
Podpora | PHP 4 a novšie |
---|---|
Stručný popis | Rozdelenie reťazca na pole pomocou oddeľovača. |
Požiadavky | Žiadne |
Poznámka | Nemožno vložiť pole, iba reťazec. |
Často potrebujeme reťazec rozdeliť podľa nejakého jednoduchého pravidla. Napríklad zoznam čísel oddelených čiarkou.
Na tento účel je skvelá funkcia explode(), ktorá ako prvý parameter berie oddeľovač (oddeľujúci reťazec) a ako druhý parameter samotné údaje:
$cisla = '3, 1, 4, 1, 5, 9';$parser = explode(', ', $cisla);foreach ($parser as $cislo) {echo $cislo . '<br>';// Tu môžeme čísla ďalej spracovať}
Ale čo ak sú čísla oddelené čiarkami, ale okolo nich sú medzery?
Riešením je analyzovať podľa najmenšieho spoločného podreťazca a potom odstrániť nežiaduce znaky okolo neho (medzery a iné biele znaky):
$cisla = '3, 1,4, 1 , 5 ,9';$parser = explode(',', $cisla);foreach ($parser as $cislo) {echo trim($cislo) . '<br>';// Tu môžeme čísla ďalej spracovať}
V tomto prípade funkcia trim()
elegantne odstráni biele miesta okolo znakov (medzery, tabulátory, zalomenia riadkov, ...) a poskytne len čisté údaje.
TIP: Pre mnohé príklady nie je funkcia explode() vhodná a je oveľa lepšie použiť regulárne výrazy.
Často však chceme analyzovať údaje len do určitej vzdialenosti a na tento účel možno použiť tretí (nepovinný) parameter limit.
Majme napríklad štruktúrované údaje oddelené dvojbodkou, kde chceme získať obsah za prvou dvojbodkou a ignorovať ostatné dvojbodky. Príklad:
$cas = 'formát: "j.n.Y - H:i"';
Ak by sme analyzovali reťazec len ako:
$parser = explode(':', $cas);
Získali by sme tieto 3 podreťazce (v iných prípadoch ich môže byť oveľa viac):
'format'' 'j.n.Y - H''i"'
Preto nastavíme limit, koľko prvkov sa má získať (a prípadne sa všetky ostatné prvky pridajú na koniec posledného prvku):
$parser = explode(':', $cas, 2);// vráťte sa:echo $parser[0]; // formátecho $parser[1]; // "j.n.Y - H:i"
Poznámka: Nežiaduce úvodzovky možno z reťazca odstrániť napríklad pomocou funkcie
trim()
:
echo trim($parser[1], '"'); // druhý parameter určuje mapu znakov, ktoré sa majú odstrániť
Často potrebujeme získať reťazec, ktorý je ohraničený dvoma inými reťazcami. Priamo v PHP na to neexistuje žiadna funkcia, ale môžeme si ju napísať sami:
function between(string $left, string $right, string $data): string{$l = explode($left, $data);$r = explode($right, $l[1]);return $r[0];}
Oveľa elegantnejšie delenie a prácu s reťazcami možno dosiahnuť pomocou regulárnych výrazov, ktorým sa venujem na samostatnej stránke.
$ip = '10.0.0.138';$parser = explode('.', $ip);echo $parser[0]; // vypíše "10"echo $parser[1]; // vypíše "0";
Premenná $ip
obsahuje vstupný reťazec, ktorý je analyzovaný podľa oddeľovača .
, návratom je pole. Rozbor pokračuje až do konca reťazca, pokiaľ nie je zadaný limit.
# | Typ | Popis |
---|---|---|
1 | reťazec | Oddeľovací reťazec. |
2 | reťazec | Parsovaný reťazec. |
3 | int | limit pre parsovanie. Toto je nepovinný parameter. Príklad: |
$text = "PHP je môj obľúbený jazyk!;$parser = explode(' ', $text, 1);echo $parser[0]; // vypíše prvé slovoecho $parser[1]; // vypíše zvyšok textuecho $parser[2]; // nevypíše nič, pretože bol nastavený limit!
Návratovou hodnotou je pole s analyzovaným reťazcom.
Indexy sú číslované od nuly po X
, pokiaľ nie je zadaný limit.
Verzia PHP | Popis |
---|---|
5.1.0 | Pridaná podpora záporného limitu na priechody. |
4.0.1 | Pridaný voliteľný parameter limit. |
Pri použití záporného limit je uvedený počet prvkov od konca reťazca.
Príklad:
$str = 'jeden|dva|tri|štyri';// kladná hranicaprint_r(explode('|', $str, 2));// záporný limit (od PHP 5.1)print_r(explode('|', $str, -1));
Vrátia sa nasledujúce polia:
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:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | sk