Funkcja PHP Explode - dzielenie ciągu znaków według separatora
Polecenie eksploduj służy do łatwego dzielenia ciągu znaków przez separator.
- Zwraca ona poszczególne wyniki w postaci tablicy numerowanej od zera,
- nie można wstawić tablicy, wprowadzany jest tylko ciąg znaków,
- nie można zmienić ogranicznika podczas przetwarzania, nie można wybrać wielu ograniczników.
| PHP 4 i nowsze | |---------------|-----------------| | Krótki opis | Dzielenie ciągu znaków na tablicę według separatora. | Wymagania | Brak | Uwaga | Nie można wstawić tablicy, tylko ciąg znaków.
Często musimy podzielić ciąg znaków według jakiejś prostej reguły. Na przykład lista liczb oddzielonych przecinkami.
Świetnie nadaje się do tego funkcja explode(), która jako pierwszy parametr przyjmuje separator (oddzielający ciąg znaków), a jako drugi - same dane:
$cisla = '3, 1, 4, 1, 5, 9';$parser = explode(',', $cisla);foreach ($parser as $cislo) {echo $cislo . '<br>.';// Tutaj możemy dalej przetwarzać liczby}
Ale co zrobić, jeśli liczby są oddzielone przecinkami, ale wokół nich są spacje?
Rozwiązaniem jest parsowanie według najmniejszego wspólnego podłańcucha, a następnie usunięcie niepożądanych znaków wokół niego (spacji i innych białych znaków):
$cisla = '3, 1,4, 1 , 5 ,9';$parser = explode(',', $cisla);foreach ($parser as $cislo) {echo trim($cislo) . '<br>.';// Tutaj możemy dalej przetwarzać liczby}
W tym przypadku funkcja trim() w elegancki sposób usuwa białą przestrzeń wokół znaków (spacje, tabulatory, podziały wierszy, ...), dając tylko czyste dane.
Limit, ograniczający liczbę parsowanych encji do tablicy
WSKAZÓWKA: Dla wielu przykładów funkcja explode() nie jest odpowiednia i lepiej jest używać wyrażeń regularnych.
Często jednak chcemy przetwarzać dane tylko do pewnej odległości i w tym celu można użyć trzeciego (opcjonalnego) parametru limit.
Na przykład mamy dane strukturalne rozdzielone dwukropkami, w których chcemy pobrać zawartość po pierwszym dwukropku i zignorować pozostałe dwukropki. Przykład:
$cas = 'format: "j.n.Y - H:i".';
Gdybyśmy mieli przetworzyć ten ciąg tylko jako:
$parser = explode(':', $cas);
Otrzymalibyśmy te 3 podłańcuchy (w innych przypadkach może być ich znacznie więcej):
'format''"j.n.Y - H''i"'
Dlatego ustalamy limit liczby elementów, które mają zostać pobrane (i ewentualnie wszystkie pozostałe zostaną dołączone do końca ostatniego elementu):
$parser = explode(':', $cas, 2);// wróć:echo $parser[0]; // formatecho $parser[1]; // "j.n.Y - H:i"
Uwaga: Niechciane cudzysłowy można usunąć z łańcucha, na przykład za pomocą funkcji
trim():
echo trim($parser[1], '"'); // drugi parametr określa mapę znaków do usunięcia
Pomiędzy, wstawianie łańcucha pomiędzy dwa łańcuchy
Często zachodzi potrzeba pobrania ciągu, który jest ograniczony przez dwa inne ciągi. Nie ma takiej funkcji bezpośrednio w PHP, ale możemy ją napisać sami:
function between(string $left, string $right, string $data): string{$l = explode($left, $data);$r = explode($right, $l[1]);return $r[0];}
Wyrażenia regularne
Znacznie bardziej eleganckie dzielenie i pracę z ciągami znaków można osiągnąć za pomocą wyrażeń regularnych, które omawiam na osobnej stronie.
Podobne funkcje
- Implode() - konkatenacja tablicy do łańcucha znaków
Przykład parsowania adresu IP
$ip = '10.0.0.138';$parser = explode('.', $ip);echo $parser[0]; // drukuje "10".echo $parser[1]; // drukuje "0";
Zmienna $ip zawiera łańcuch wejściowy, który jest parsowany zgodnie z delimiterem ., a zwracana wartość jest tablicą. Przetwarzanie jest kontynuowane do końca łańcucha, chyba że zostanie określony limit.
Parametry
| # | Typ | Opis |
|---|---|---|
| 1 | ciąg znaków | Ciąg znaków rozdzielających. |
| 2 | string | Parsowany ciąg znaków. |
| 3 | int | limit parsowania. Jest to parametr opcjonalny. Przykład: |
$text = 'PHP to mój ulubiony język!';$parser = explode('', $text, 1);echo $parser[0]; // wypisuje pierwsze słowoecho $parser[1]; // wypisuje resztę tekstuecho $parser[2]; // nie wypisuje niczego, ponieważ został ustawiony limit!
Wartości zwracane
Wartością zwracaną jest tablica zawierająca sparsowany ciąg znaków.
Indeksy są numerowane od zera do X, chyba że podano ograniczenie.
Różnice w stosunku do wcześniejszych wersji
| Wersja PHP | Opis |
|---|---|
| 5.1.0 | Dodano obsługę ujemnego limitu przepustek. |
| 4.0.1 | Dodano opcjonalny parametr limit. |
Wskazówki i uwagi
W przypadku użycia ujemnego limitu podawana jest liczba elementów od końca łańcucha.
Przykład:
$str = 'jeden, dwa, trzy, cztery';// granica dodatniaprint_r(explode('|', $str, 2));// limit ujemny (od PHP 5.1)print_r(explode('|', $str, -1));
Zostaną zwrócone następujące pola:
Array([0] => one[1] => two|three|four)Array([0] => one[1] => two[2] => three)