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"

?>

注释

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

参见

添加注释

用户贡献的注释 14 个注释

357
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: ''
91
ASchmidt at Anamera dot net
5 年前
从示例中不清楚是否/如何处理关联数组。 "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
105
omar dot ajoue at kekanto dot com
11 年前
还可以用于构建标签或复杂列表,例如以下示例

<?php

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

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

?>

这只是一个例子,你可以通过找到正确的粘合剂来创建更多例子!;)
26
Felix Rauch
7 年前
值得注意的是,传递给 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 变成了空。
11
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 ');

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

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

这让我困惑了一段时间。
2
biziclop
3 年前
有时需要在项目之间添加字符串,不仅是在中间,还在前面或后面,还需要对零个项目进行正确的处理。
在这种情况下,仅仅在 implode() 旁边添加分隔符是不够的,所以我创建了这个小助手函数。

<?php

function wrap_implode( $array, $before = '', $after = '', $separator = '' ){
if( !
$array ) return '';
return
$before . implode("{$after}{$separator}{$before}", $array ) . $after;
}

echo
wrap_implode(['path','to','file.php'], '/');
// "/path/to/file.php"

$pattern = '#'. wrap_implode([4,2,2], '\d{', '}', '[-.]') .'#';
echo
$pattern, "\n"; // #\d{4}[-.]\d{2}[-.]\d{2}#
echo preg_replace( $pattern, '[REDACTED]', 'The UFO appeared between 2012-12-24 and 2013.01.06 every night.');
// 'The UFO appeared between [REDACTED] and [REDACTED] every night.

echo wrap_implode(['line','by','line'], '<b>', '</b>', '<br> ');
// <b>line</b><br> <b>by</b><br> <b>line</b>

echo wrap_implode( ['<a href="">Menu Item 1</a>', '<a href="">Menu Item 2</a>',],
"<li>", "</li>\n",
"<li> | </li>\n",
);
/*
<li><a href="">Link1</a></li>
<li> | </li>
<li><a href="">Link2</a></li>
*/

?>
13
masterandujar
11 年前
如果你使用以下方法,会更方便

<?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 becomes "Select name,email,phone from usertable where user_id IN (1,6,12,18,24)"
?>

如果你从用户那里获取 id,请确保进行转义/清理/使用预处理语句。
6
Anonymous
9 年前
null 值也会被拼接。你可以使用 array_filter() 来筛选 null 值。

<?php
$ar
= array("hello", null, "world");
print(
implode(',', $ar)); // hello,,world
print(implode(',', array_filter($ar, function($v){ return $v !== null; }))); // hello,world
?>
-14
Rafael Pereira
4 年前
如果你想在数组中使用键

示例
$arr=array(
array("id" => 1,"name" => "Test1"),
array("id" => 2,"name" => "Test2"),
);

echo implode_key(",",$arr, "name");
输出: Test1, Test2

function implode_key($glue, $arr, $key){
$arr2=array();
foreach($arr as $f){
if(!isset($f[$key])) continue;
$arr2[]=$f[$key];
}
return implode($glue, $arr2);
}
-38
admin at lanlink dot net dot au
6 年前
数组可以包含数值和字符串。implode 会将所有数值数组元素转换为字符串。

<?php
$test
=implode(["one",2,3,"four",5.67]);
echo
$test;
//outputs: "one23four5.67"
?>
-9
info AT sinistercircuits DOT com
2 年前
文档中没有提到空数组的行为,所以我尝试了一下,得到的结果是

<?php
$ar
= array();
$result = implode(',', $ar); // Comma arbitrarily applied as the separator
$is_result_empty = empty($result);
?>

$result
$is_result_empty: 1

换句话说,结果是一个空字符串。
-18
info at ensostudio dot ru
3 年前
<?php
* 递归地将片段用字符串连接起来.
*
* @
param mixed $glue 片段对之间的字符串(glue) 或 一个 数组 对的 glue 和键值 glue 或 $pieces.
* @param iterable $pieces 要拼接的片段 (可选).
* @return string 连接后的字符串
*/
function double_implode($glue, iterable $pieces = null): string
{
$glue2 = null;
if ($pieces === null) {
$pieces = $glue;
$glue = '';
} elseif (is_array($glue)) {
list($glue, $glue2) = $glue;
}

$result = [];
foreach ($pieces as $key => $value) {
$result[] = $glue2 === null ? $value : $key . $glue2 . $value;
}
return implode($glue, $result);
}
?>
示例:
<?php
$array = ['
a' => 1, 'b' => 2];
$str = implode($array);
$str = implode('
, ', $array);
$str = implode(['" ', '="'], $array);

$iterator = new ArrayIterator($array);
$str = implode($iterator);
$str = implode('
, ', $iterator);
$str = implode(['" ', '="'], $iterator);
?>
To Top