PHP Conference Nagoya 2025

explode

(PHP 4, PHP 5, PHP 7, PHP 8)

explodeРозбиває рядок на підрядки

Опис

explode(string $delimiter, string $string, int $limit = PHP_INT_MAX): array

Повертає масив рядків, кожен з яких є підрядком рядка string, який був поділений за допомогою роздільника delimiter.

Параметри

delimiter

Роздільник.

string

Вхідний рядок.

limit

Якщо параметр limit встановлений і мість додатнє число, вихідний масив міститиме максимум limit елементів. А останній елемент міститиме залишок рядка string.

Якщо параметр limit містить від'ємне число, повернуться всі елементи окрім останніх -limit.

Якщо параметр limit дорівнює нулю, то він розцінюється як 1.

Зауваження:

На відміну від implode(), яка з історичних причин може приймати параметри у будь-якому порядку, для explode() це недопустимо. Ви повинні переконатися, що аргумент delimiter знаходиться перед аргументом string.

Значення, що повертаються

Повертає масив (array) підрядків (string) створених шляхом поділу string на кордонах, заданих параметром delimiter.

Якщо delimiter є пустим рядком string (""), explode() поверне false. Якщо delimiter містить значення, якого немає в string а також коли парамерт limit містить від'ємне значення - повертається порожній масив array. В інакшому випадку повертається масив array, який містить оригінальний рядок string.

Журнал змін

Версія Опис
5.1.0 Додано підтримку від'ємного значення параметра limit

Приклади

Приклад #1 Використання explode()

<?php
// Приклад 1
$pizza = "частина1 частина2 частина3 частина4 частина5 частина6";
$pieces = explode(" ", $pizza);
echo
$pieces[0]; // частина1
echo $pieces[1]; // частина2

// Приклад 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list(
$user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo
$user; // foo
echo $pass; // *

?>

Приклад #2 explode() Повернення результату

<?php
/*
Рядок, який не містить роздільника,
просто поверне масив з одним значенням оригінального рядка.
*/
$input1 = "Привіт";
$input2 = "Привіт, народе!";
$input3 = ',';
var_dump( explode( ',', $input1 ) );
var_dump( explode( ',', $input2 ) );

?>

Поданий вище приклад виведе:

array(1)
(
    [0] => string(6) "Привіт"
)
array(2)
(
    [0] => string(6) "Привіт"
    [1] => string(8) " народе!"
)
array(2)
(
    [0] => string(0) ""
    [1] => string(0) ""
)

Приклад #3 Використання limit

<?php
$str
= 'один|два|три|чотири';

// додатній ліміт
print_r(explode('|', $str, 2));

// від'ємний ліміт (з версії PHP 5.1)
print_r(explode('|', $str, -1));
?>

Поданий вище приклад виведе:

Array
(
    [0] => один
    [1] => два|три|чотири
)
Array
(
    [0] => один
    [1] => два
    [2] => три
)

Примітки

Зауваження: Ця функція є бінарно безпечною.

Прогляньте також

add a note

User Contributed Notes 4 notes

up
29
Gerben
2 years ago
Note that an empty input string will still result in one element in the output array. This is something to remember when you are processing unknown input.

For example, maybe you are splitting part of a URI by forward slashes (like "articles/42/show" => ["articles", "42", "show"]). And maybe you expect that an empty URI will result in an empty array ("" => []). Instead, it will contain one element, with an empty string:

<?php

$uri
= '';
$parts = explode('/', $uri);
var_dump($parts);

?>

Will output:

array(1) {
[0]=>
string(0) ""
}

And not:

array(0) {
}
up
9
marc
1 year ago
If your data is smaller than the expected count with the list expansion:

<?php
$data
= "foo:*:1023:1000::/home/foo:/bin/sh";
list(
$user, $pass, $uid, $gid, $gecos, $home, $shell,$nu) = explode(":", $data);
?>

The result is a warning not an error:

PHP Warning: Undefined array key 7 in ...

The solution is to pad the array to the expected length:

<?php
$data
= "foo:*:1023:1000::/home/foo:/bin/sh";
list(
$user, $pass, $uid, $gid, $gecos, $home, $shell,$nu) = array_pad( explode(":", $data), 8, "");
// where 8 is the count of the list arguments
?>
up
11
bocoroth
3 years ago
Be careful, while most non-alphanumeric data types as input strings return an array with an empty string when used with a valid separator, true returns an array with the string "1"!

var_dump(explode(',', null)); //array(1) { [0]=> string(0) "" }
var_dump(explode(',', false)); //array(1) { [0]=> string(0) "" }

var_dump(explode(',', true)); //array(1) { [0]=> string(1) "1" }
up
0
Alejandro-Ihuit
2 years ago
If you want to directly take a specific value without having to store it in another variable, you can implement the following:

$status = 'Missing-1';

echo $status_only = explode('-', $status)[0];

// Missing
To Top