2024 年日本 PHP 研討會

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';

// 正數限制
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
1 年前
如果您的資料比使用列表展開的預期計數小

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

結果是警告而不是錯誤

PHP 警告:未定義的陣列鍵 7 於 ...

解決方案是將陣列填充到預期的長度

<?php
$data
= "foo:*:1023:1000::/home/foo:/bin/sh";
list(
$user, $pass, $uid, $gid, $gecos, $home, $shell,$nu) = array_pad( explode(":", $data), 8, "");
// 其中 8 是 list 參數的數量
?>
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
2 年前
如果您想直接取得特定值而不必將其儲存在另一個變數中,您可以執行以下操作

$status = 'Missing-1';

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

// Missing
To Top