2024 年 PHP 日本會議

implode

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

implode使用字串連接陣列元素

說明

implode(字串 $separator, 陣列 $array): 字串

替代簽章(不支援具名引數)

implode(陣列 $array): 字串

舊版簽章(自 PHP 7.4.0 起棄用,自 PHP 8.0.0 起移除)

implode(陣列 $array, 字串 $separator): 字串

使用 separator 字串連接陣列元素。

參數

分隔符號

選用。預設為空字串。

陣列

要合併的字串陣列。

回傳值

回傳一個字串,包含所有陣列元素的字串表示,順序相同,每個元素之間用分隔符號字串隔開。

更新日誌

版本 說明
8.0.0 不再支援在 array 參數後傳遞 separator 參數。
7.4.0 array 參數後傳遞 separator 參數(即使用舊版簽名)已被棄用。

範例

範例 #1 implode() 範例

<?php

$array
= ['lastname', 'email', 'phone'];
var_dump(implode(",", $array)); // string(20) "lastname,email,phone"

// 使用空陣列時回傳空字串:
var_dump(implode('hello', [])); // string(0) ""

// 分隔符號是選用的:
var_dump(implode(['a', 'b', 'c'])); // string(3) "abc"

?>

注意事項

注意這個函式是二進位安全的。

參見

新增筆記

使用者貢獻的筆記 9 則筆記

houston_roadrunner at yahoo dot com
15 年前
應該注意的是,包含一個或沒有元素的陣列也能正常運作。例如

<?php
$a1
= array("1","2","3");
$a2 = array("a");
$a3 = array();

echo
"a1 is: '".implode("','",$a1)."'<br>";
echo
"a2 is: '".implode("','",$a2)."'<br>";
echo
"a3 is: '".implode("','",$a3)."'<br>";
?>

將會產生
===========
a1 is: '1','2','3'
a2 is: 'a'
a3 is: ''
ASchmidt at Anamera dot net
6 年前
從範例來看,不清楚是否/如何處理關聯式陣列。「implode」函式作用於陣列的「值」,而忽略任何鍵值。

<?php
declare(strict_types=1);

$a = array( 'one','two','three' );
$b = array( '1st' => 'four', 'five', '3rd' => 'six' );

echo
implode( ',', $a ),'/', implode( ',', $b );
?>

輸出
one,two,three/four,five,six
omar dot ajoue at kekanto dot com
11 年前
也可以用於構建標籤或複雜列表,如下所示

<?php

$elements
= array('a', 'b', 'c');

echo
"<ul><li>" . implode("</li><li>", $elements) . "</li></ul>";

?>

這只是一個例子,只要找到合適的黏著劑,您就可以創造更多! ;)
Felix Rauch
8 年前
值得注意的是,提供給 implode() 的陣列可以包含物件,前提是這些物件實作了 __toString() 方法。

範例
<?php

class Foo
{
protected
$title;

public function
__construct($title)
{
$this->title = $title;
}

public function
__toString()
{
return
$this->title;
}
}

$array = [
new
Foo('foo'),
new
Foo('bar'),
new
Foo('qux')
];

echo
implode('; ', $array);
?>

將輸出

foo; bar; qux
alexey dot klimko at gmail dot com
13 年前
如果您想將布林值陣列合併,您會得到一個奇怪的結果
<?php
var_dump
(implode('',array(true, true, false, false, true)));
?>

輸出
string(3) "111"

TRUE 變成了 "1",FALSE 變成了空字串。
Honk der Hase
4 年前
如果你想把一個陣列以鍵值對的形式合併成字串,這個方法很方便。
第三個參數是用於鍵和值之間的符號。

<?php
function mapped_implode($glue, $array, $symbol = '=') {
return
implode($glue, array_map(
function(
$k, $v) use($symbol) {
return
$k . $symbol . $v;
},
array_keys($array),
array_values($array)
)
);
}

$arr = [
'x'=> 5,
'y'=> 7,
'z'=> 99,
'hello' => 'World',
7 => 'Foo',
];

echo
mapped_implode(', ', $arr, ' is ');

// 輸出:x is 5, y is 7, z is 99, hello is World, 7 is Foo

?>
匿名
11 年前
值得注意的是,如果您不小心對字串而不是陣列呼叫 implode,您不會取回您的字串,而是得到 NULL。
<?php
var_dump
(implode(':', 'xxxxx'));
?>
返回
NULL

這讓我困擾了一陣子。
masterandujar
12 年前
如果您使用以下方法,甚至更方便

<?php
$id_nums
= array(1,6,12,18,24);

$id_nums = implode(", ", $id_nums);

$sqlquery = "Select name,email,phone from usertable where user_id IN ($id_nums)";

// $sqlquery 會變成 "Select name,email,phone from usertable where user_id IN (1,6,12,18,24)"
?>

如果 ID 是從使用者取得,請務必使用跳脫字元/過濾/參數化查詢來避免 SQL 注入。
匿名
9 年前
空值也會被併入。您可以使用 array_filter() 來排除空值。

<?php
$ar
= array("hello", null, "world");
print(
implode(',', $ar)); // hello,,world
print(implode(',', array_filter($ar, function($v){ return $v !== null; }))); // hello,world
?>
To Top