explode

(PHP 4、PHP 5、PHP 7、PHP 8)

explode通过字符串拆分字符串

描述

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

返回一个字符串数组,每个字符串都是 string 的子字符串,通过在由字符串 separator 形成的边界处拆分它来形成。

参数

separator

边界字符串。

string

输入字符串。

limit

如果 limit 设置为正数,则返回的数组将包含最多 limit 个元素,最后一个元素包含 string 的其余部分。

如果 limit 参数为负数,则返回除最后 -limit 个组件之外的所有组件。

如果 limit 参数为零,则将其视为 1。

注意:

在 PHP 8.0 之前,implode() 接受其参数的任何顺序。 explode() 从未支持此功能:您必须确保 separator 参数在 string 参数之前。

返回值

返回一个 array,其中包含通过在由 separator 形成的边界处拆分 string 参数而创建的 string

如果 separator 是一个空 string (""),则 explode() 抛出 ValueError。如果 separator 包含 string 中不存在的值,并且使用了负数 limit,则将返回一个空 array,否则将返回一个包含 stringarray。如果 separator 值出现在 string 的开头或结尾,则这些值将作为空 array 值分别添加到返回的 array 的第一个或最后一个位置。

变更日志

版本 描述
8.0.0 separator 参数被赋予空字符串 ("") 时,explode() 现在将抛出 ValueError。以前,explode() 返回 false

示例

示例 #1 explode() 示例

<?php
// 示例 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo
$pieces[0]; // piece1
echo $pieces[1]; // piece2

// 示例 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 = "hello";
$input2 = "hello,there";
$input3 = ',';
var_dump( explode( ',', $input1 ) );
var_dump( explode( ',', $input2 ) );
var_dump( explode( ',', $input3 ) );

?>

上面的示例将输出

array(1)
(
    [0] => string(5) "hello"
)
array(2)
(
    [0] => string(5) "hello"
    [1] => string(5) "there"
)
array(2)
(
    [0] => string(0) ""
    [1] => string(0) ""
)

示例 #3 limit 参数示例

<?php
$str
= 'one|two|three|four';

// 正数限制
print_r(explode('|', $str, 2));

// 负数限制
print_r(explode('|', $str, -1));
?>

上面的示例将输出

Array
(
    [0] => one
    [1] => two|three|four
)
Array
(
    [0] => one
    [1] => two
    [2] => three
)

注释

注意: 此函数是二进制安全的。

参见

添加注释

用户贡献的注释 4 个注释

Gerben
2 年前
请注意,空输入字符串将仍然导致输出数组中有一个元素。在处理未知输入时,这一点需要注意。

例如,您可能正在通过正斜杠拆分 URI 的一部分(例如“articles/42/show”=>[“articles”, “42”, “show”])。您可能希望空 URI 会导致空数组(""=>[])。相反,它将包含一个元素,其中包含一个空字符串

<?php

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

?>

将输出

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

而不是

array(0) {
}
marc
9 个月前
如果您的数据小于使用列表扩展的预期计数

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

结果是警告而不是错误

PHP Warning: Undefined array key 7 in ...

解决方案是将数组填充到预期长度

<?php
$data
= "foo:*:1023:1000::/home/foo:/bin/sh";
list(
$user, $pass, $uid, $gid, $gecos, $home, $shell,$nu) = array_pad( explode(":", $data), 8, "");
// 其中 8 是列表参数的计数
?>
bocoroth
3 年前
小心,虽然大多数非字母数字数据类型作为输入字符串在使用有效分隔符时返回包含空字符串的数组,但 true 返回包含字符串“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" }
Alejandro-Ihuit
1 年前
如果您想直接获取特定值而不必将其存储在另一个变量中,您可以实现以下内容

$status = 'Missing-1';

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

// Missing
To Top