PHP Conference Japan 2024

explode

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

explode按字符串分割字符串

描述

explode(字符串 $separator, 字符串 $string, 整数 $limit = PHP_INT_MAX): 数组

返回一个字符串数组,每个字符串都是 string 的子字符串,通过按 separator 字符串形成的边界分割而成。

参数

separator

边界字符串。

string

输入字符串。

limit

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

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

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

注意:

在 PHP 8.0 之前,implode() 可以以任意顺序接受其参数。explode() 从未支持过这一点:您必须确保 separator 参数位于 string 参数之前。

返回值

返回一个由 字符串 组成的 数组,这些字符串是通过按 separator 形成的边界分割 string 参数创建的。

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

变更日志

版本 描述
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';

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

// 负数 limit
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);

?>

将输出

数组(1) {
[0]=>
字符串(0) ""
}

并且不

数组(0) {
}
marc
1 年前
如果您的数据小于列表扩展的预期计数

<?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)); //数组(1) { [0]=> 字符串(0) "" }
var_dump(explode(',', false)); //数组(1) { [0]=> 字符串(0) "" }

var_dump(explode(',', true)); //数组(1) { [0]=> 字符串(1) "1" }
Alejandro-Ihuit
2 年前
如果您想直接获取特定值而不必将其存储在另一个变量中,您可以实现以下操作

$status = 'Missing-1';

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

// Missing
To Top