PHP Conference Japan 2024

implode

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

implode用字符串连接数组元素

描述

implode(string $separator, array $array): string

备用签名(不支持命名参数)

implode(array $array): string

旧版签名(自 PHP 7.4.0 起已弃用,自 PHP 8.0.0 起已移除)

implode(array $array, string $separator): string

使用 separator 字符串连接数组元素。

参数

separator

可选。默认为空字符串。

array

要合并的字符串数组。

返回值

返回一个字符串,其中包含所有数组元素的字符串表示形式,并按相同顺序排列,每个元素之间用分隔符字符串分隔。

变更日志

版本 描述
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 条备注

364
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: ''
98
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
104
omar dot ajoue at kekanto dot com
11 年前
也可用于构建标签或复杂的列表,例如以下示例

<?php

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

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

?>

这只是一个例子,只要找到合适的粘合剂,你就可以创建更多内容!;)
27
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
47
alexey dot klimko at gmail dot com
13 年前
如果你想连接一个布尔值的数组,你会得到一个奇怪的结果
<?php
var_dump
(implode('',array(true, true, false, false, true)));
?>

输出
string(3) "111"

TRUE 变成了 "1",FALSE 变成了空。
9
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

?>
20
Anonymous
11 年前
值得注意的是,如果你不小心对字符串而不是数组调用 implode,你不会得到你的字符串,而是得到 NULL
<?php
var_dump
(implode(':', 'xxxxx'));
?>
返回
NULL

这让我困惑了一段时间。
13
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,请确保转义/清理/使用预处理语句。
7
Anonymous
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