Explode використовується для того, щоб легко розділити рядок за допомогою роздільника.
Підтримка PHP 4 і новіших версій |
---|
Короткий опис |
Вимоги |
Примітка |
Часто нам потрібно розділити рядок за якимось простим правилом. Наприклад, перелік чисел через кому.
Для цього чудово підходить функція explode(), що приймає в якості першого параметра роздільник (розділювач рядка), а в якості другого - самі дані:
$cisla = '3, 1, 4, 1, 5, 9';$parser = explode(',', $cisla);foreach ($parser as $cislo) {echo $cislo . '<br>';// Тут ми можемо обробляти числа далі}
Але що робити, якщо цифри розділені комами, але навколо них є пробіли?
Рішення полягає в розборі по найменшому спільному підрядку, а потім видаленні небажаних символів навколо нього (пробілів та інших пропусків):
$cisla = '3, 1,4, 1 , 5 ,9';$parser = explode(',', $cisla);foreach ($parser as $cislo) {echo trim($cislo) . '<br>';// Тут ми можемо обробляти числа далі}
При цьому функція trim()
елегантно видаляє пробіли навколо символів (пробіли, табуляції, переноси рядків, ...), видаючи тільки чисті дані.
ПОРАДА: Для багатьох прикладів explode() не підходить і набагато краще використовувати регулярні вирази.
Однак часто ми хочемо проаналізувати дані лише до певної відстані, і для цього можна використовувати третій (необов'язковий) параметр limit.
Наприклад, нехай у нас є структуровані дані, розділені двокрапкою, де ми хочемо отримати вміст після першої двокрапки та ігнорувати інші двокрапки. Приклад:
$cas = 'формат: "j.n.Y - H:i"';
Якби ми розбирали рядок тільки як:
$parser = explode(':', $cas);
Ми отримаємо ці 3 підрядки (в інших випадках їх може бути набагато більше):
'формат''"j.n.Y - H''i"'
Тому ми встановлюємо обмеження на кількість елементів, які можна отримати (і, можливо, всі інші будуть додаватися в кінець останнього елементу):
$parser = explode(':', $cas, 2);// Повернись:echo $parser[0]; // форматecho $parser[1]; // "j.n.Y - H:i"
Примітка: Непотрібні лапки можна видалити з рядка, наприклад, за допомогою функції trim()
:
echo trim($parser[1], '"'); // другий параметр задає карту символів для видалення
Часто нам потрібно отримати рядок, який обмежений двома іншими рядками. Безпосередньо в PHP немає функції для цього, але ми можемо написати її самі:
function between(string $left, string $right, string $data): string{$l = explode($left, $data);$r = explode($right, $l[1]);return $r[0];}
Набагато більш елегантного розбиття і роботи з рядками можна досягти за допомогою регулярних виразів, про які я розповідаю на окремій сторінці.
$ip = '10.0.0.138';$parser = explode('.', $ip);echo $parser[0]; // prints "10"echo $parser[1]; // виводить "0";
Змінна $ip
містить вхідний рядок, який розбирається згідно з розділювачем .
, повернення - масив. Синтаксичний розбір продовжується до кінця рядка, якщо не вказано обмеження.
|---|--------|------| | 1-й рядок. Розділювальний рядок. | 2 рядка. Розбір рядка. | 3 | int | межа розбору. Це необов'язковий параметр. Приклад:
$text = 'PHP - моя улюблена мова!';$parser = explode('', $text, 1);echo $parser[0]; // виводиться перше словоecho $parser[1]; // виводить решту текстуecho $parser[2]; // нічого не виводить, тому що встановлено ліміт!
Значення, що повертається - масив з розібраним рядком.
Індекси нумеруються від нуля до X
, якщо не вказано обмеження.
| Версія PHP | Опис | Опис |-----------|-------| | 5.1.0 | Додана підтримка від'ємного ліміту на пропуски. | 4.0.1 | Додано необов'язковий параметр limit.
При використанні від'ємного обмеження вказується кількість елементів з кінця рядка.
Приклад:
$str = 'один|два|три|чотири';// позитивна межаprint_r(explode('|', $str, 2));// від'ємний ліміт (починаючи з PHP 5.1)print_r(explode('|', $str, -1));
Будуть повернуті наступні поля:
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: ... | uk