implode($separator, $array) 把数组的值连接成一个字符串,每两个值之间插入 $separator:implode(', ', ['red', 'green', 'blue']) 返回 "red, green, blue"。
分隔符只放在元素之间,不会出现在第一个元素之前或最后一个元素之后。它是 explode() 的反向操作,后者把字符串拆分成数组。
语法
implode(string $separator, array $array): string
implode(array $array): string // separator defaults to ""
分隔符写在前面。旧代码有时会把数组写在前面,implode($array, ', ')。这种顺序在 PHP 7.4 中被弃用,在 PHP 8.0 中被移除,现在会抛出 TypeError: implode(): Argument #2 ($array) must be of type ?array, string given。
implode 和 join 的区别
join() 是 implode() 的别名。两者接收相同的参数,返回相同的字符串,所以选一个并保持一致就好。
数字、布尔值和 null 会怎样
每个值都会先被转换成字符串。数字的输出和你预期的一样,true 变成 "1",false 和 null 变成空字符串,于是会出现两个连在一起的分隔符。
implode 关联数组
implode() 会忽略键,只连接值。要得到 key=value 这样的键值对,先用 array_map() 遍历键和值构建出每一段,再连接起来。http_build_query() 对 URL 查询字符串做同样的事,还会对空格和特殊字符进行编码。
用同样的模式也可以只连接键:implode(', ', array_keys($user))。更多关于键和值的内容见关联数组页面。
用换行符连接,或构建 HTML 列表
分隔符可以是任何字符串。"\n"(双引号)会让每个值单独占一行,这对文本文件和命令行输出很方便。如果用 HTML 标签作为分隔符,implode() 一行就能构建出一个列表。运行下面的代码,“页面”标签页会显示渲染后的列表。
在连接之前用 htmlspecialchars() 转义每个值,可以防止像 <b> 这样的值变成 HTML 标记。
在最后一项前加上 "and"
给人读的列表通常需要在最后一个元素前面加上 "and"。先把最后一个元素取出来,连接其余元素,再把它加回去:
常见错误:嵌套数组
implode() 只处理一层。如果某个元素本身是数组,它会被转换成单词 Array,并且 PHP 会输出一条警告:
<?php
echo implode(', ', ['red', ['orange', 'yellow']]);
Warning: Array to string conversion in /home/index.php on line 2
red, Array
先把内部数组展平,或者分别连接每个内部数组:
常见问题
PHP 中的 implode() 有什么作用?
它把数组的值连接成一个字符串,并在值之间放上分隔符:implode(', ', ['a', 'b', 'c']) 返回 "a, b, c"。它是 explode() 的反向操作。
implode() 和 join() 有什么区别?
没有区别。join() 是 implode() 的别名:参数相同,结果也相同。大多数代码里看到的都是 implode() 这个名字。
怎么把关联数组连同键一起 implode?
implode() 只使用值。要包含键,先构建好每一段:implode(', ', array_map(fn($k, $v) => "$k=$v", array_keys($a), $a))。如果是 URL 查询字符串,http_build_query($a) 一次调用就能完成。
为什么 implode() 在 PHP 8 中报 TypeError?
因为参数用的是旧顺序。implode($array, ', ') 在 PHP 7.4 中被弃用,在 PHP 8.0 中被移除。要把分隔符写在前面:implode(', ', $array)。
PHP 中怎么把数组转换成逗号分隔的字符串?
用 implode(',', $array)。如果希望每个逗号后面有一个空格,就用 ', ' 作为分隔符。如果要写 CSV 文件,请用 fputcsv(),它还会给包含逗号的值加上引号。