← PHP数组函数详解:用内置函数高效操作数组数据 没有下一篇了 →

PHP数组与字符串互转:Implode、Explode与Json_encode的实践运用

原创 2026-05-09 PHP 已有人查阅

数组和字符串是PHP里两种基本的数据容器。数组擅长结构化存储,方便遍历和操作单个元素;字符串擅长序列化传输,适合存入文件、数据库或通过API发送。在开发里,这两种形态经常需要互相转换——比如把用户选中的标签数组拼成逗号分隔的字符串存库,或者从库里取出逗号分隔的字符串还原成数组来遍历。

PHP提供了几组内置函数来处理数组和字符串之间的转换。其中implode()join()负责“数组→字符串”,explode()负责“字符串→数组”,json_encode()则把数组转成JSON格式的字符串,适合跨语言数据交换。下面逐一讲解。

一、Implode函数:把数组元素粘合成字符串

implode()是PHP里把数组转成字符串很常用的函数。它把数组的每个元素用指定的分隔符串起来,返回一个字符串。别名是join(),两个函数在功能上一样,用哪个看个人习惯。

语法:

implode(分隔符, 数组);
  • 分隔符:插在相邻两个元素之间的字符串。可以是空格、逗号、下划线、连字符,或者任何自定义内容。如果不传分隔符,默认为空字符串,元素会紧挨在一起。

  • 数组:要转换的数组。键名不会被包含在结果里,只有值参与拼接。

实例1:基础用法,用空格连接单词组成句子

<?php
// 声明一个单词数组
$wordList = array("PHP", "数组", "转换", "为", "字符串");

// 查看原始数组结构
echo "原始数组:<br/>";
print_r($wordList);
echo "<br/><br/>";

// 用空格作为分隔符,将数组元素拼接成字符串
$sentence = implode(" ", $wordList);
echo "转换后的字符串:{$sentence}";
?>

输出:

原始数组:
Array ([0] => PHP [1] => 数组 [2] => 转换 [3] => 为 [4] => 字符串)

转换后的字符串:PHP 数组 转换 为 字符串

implode(" ", $wordList)在每个元素之间塞入一个空格,拼接后形成一句通顺的话。

实例2:使用不同分隔符的效果对比

同一个数组,用不同的分隔符连接,产出的字符串格式不同。这对生成URL路径、文件命名、日志格式等场景都很实用。

<?php
$tagList = array("后端", "PHP", "教程", "2026");

echo "使用不同分隔符的效果:<br/>";
echo "空格:" . implode(" ", $tagList) . "<br/>";
echo "逗号:" . implode(", ", $tagList) . "<br/>";
echo "下划线:" . implode("_", $tagList) . "<br/>";
echo "连字符:" . implode("-", $tagList) . "<br/>";
echo "斜杠:" . implode("/", $tagList) . "<br/>";
?>

输出:

使用不同分隔符的效果:
空格:后端 PHP 教程 2026
逗号:后端, PHP, 教程, 2026
下划线:后端_PHP_教程_2026
连字符:后端-PHP-教程-2026
斜杠:后端/PHP/教程/2026

逗号分隔常用于数据库存储标签列表,连字符常用于生成SEO友好的URL别名,下划线常用于生成文件名。选择分隔符的原则是:确保分隔符在元素值本身中不出现,否则后续用explode()还原数组时会出现切割错误。

注意: implode()转换后返回的是字符串类型。但原数组本身没变——你用gettype()检测原数组变量,它依然是array类型。implode()不修改原数组,只返回一个新字符串。

二、Explode函数:把字符串拆解成数组

explode()implode()的逆向操作。它按照指定的分隔符把字符串切开,返回一个索引数组。

语法:

explode(分隔符, 字符串);

实例:把字符串还原为数组

<?php
$tagString = "后端, PHP, 教程, 2026";
echo "原始字符串:{$tagString}<br/>";

// 用逗号加空格作为分隔符,切回数组
$tagArray = explode(", ", $tagString);

echo "还原后的数组:<br/>";
print_r($tagArray);
?>

输出:

原始字符串:后端, PHP, 教程, 2026
还原后的数组:
Array ([0] => 后端 [1] => PHP [2] => 教程 [3] => 2026)

explode()implode()是一对典型的数据形态转换组合。从数据库取出逗号分隔的字段值时,explode()能很方便地把它变回数组用于遍历或处理。

三、Join函数:Implode的等效替代

join()implode()的别名,语法和功能一样。两个函数在PHP内核里指向同一个底层实现,参数顺序和返回值都没有差别。

语法:

join(分隔符, 数组);

实例:用join()实现数组到字符串的转换

<?php
$toolList = array("VSCode", "Git", "MySQL", "Docker");

echo "原始数组:<br/>";
print_r($toolList);
echo "<br/><br/>";

// 不带分隔符(默认空字符串)
echo "无分隔符:" . join($toolList) . "<br/>";

// 带下划线分隔符
echo "下划线分隔:" . join("_", $toolList) . "<br/>";
?>

输出:

原始数组:
Array ([0] => VSCode [1] => Git [2] => MySQL [3] => Docker)

无分隔符:VSCodeGitMySQLDocker
下划线分隔:VSCode_Git_MySQL_Docker

join()不带参数调用时(只传数组),元素直接首尾相连。这在生成哈希字符串或合并ID列表时偶尔会用到。

本节课程知识要点: implode()join()等价,选哪个取决于个人编码习惯。我倾向用implode(),因为它的字面含义——“向内爆破成字符串”——和explode()(向外爆破成数组)形成清晰的语义对照,代码可读性更好。但如果你更习惯JavaScript的join()命名,用join()也没问题。

四、Json_encode函数:把数组转成JSON格式字符串

implode()适合处理简单的索引数组,但当数组结构比较复杂——特别是多维关联数组时——用分隔符拼接就不太合适了。这时json_encode()是更合理的选择。它把PHP数组(或对象)转换成JSON字符串,保留所有层级结构和键值关系。

JSON(JavaScript Object Notation)是跨语言数据交换的通用格式,几乎所有编程语言都能解析。把PHP数组转成JSON字符串后,可以方便地存入数据库的文本字段、写入日志文件、或者通过API返回给前端。

语法:

json_encode(数组或对象);

实例:把多维关联数组转为JSON字符串

<?php
// 定义一个嵌套结构的用户信息数组
$userProfile = array(
    "姓名" => "张明",
    "年龄" => 28,
    "联系方式" => array(
        "邮箱" => "alan@ebingou.cn",
        "手机" => "13800138000",
        "地址" => array(
            "省份" => "广东",
            "城市" => "广州",
            "邮编" => "510000"
        )
    ),
    "技能" => array("PHP", "MySQL", "JavaScript")
);

// 转成JSON字符串
$jsonString = json_encode($userProfile);

echo "JSON格式字符串:<br/>";
echo $jsonString;
?>

输出(格式化后便于阅读,实际输出在一行上):

{"姓名":"张明","年龄":28,"联系方式":{"邮箱":"alan@ebingou.cn","手机":"13800138000","地址":{"省份":"广东","城市":"广州","邮编":"510000"}},"技能":["PHP","MySQL","JavaScript"]}

可以看到,json_encode()完整保留了数组的多层嵌套结构、键名和值的对应关系。json_decode()则是它的逆向操作,把JSON字符串再转回PHP数组。

个人经验分享: 在代码号学习编程的过程中,json_encode()json_decode()会在API开发、前端数据交互、配置存储等场景频繁出现。日常开发里,如果一个数组结构比较复杂(嵌套超过一层),不建议用implode处理——不仅分隔符选择头疼,还原时也容易因为分隔符冲突导致数据损坏。多维数组转字符串,直接用json_encode()是比较可靠的做法。

主观建议: 三种转换方式各有适用场景。简单的一维索引数组(比如标签列表、ID),用implode()配合explode()组合足够。复杂结构(比如用户档案、嵌套配置),选json_encode()json_decode()。不要试图用implode()去处理多维数组——它会把内层数组也当字符串处理,丢失结构信息。

PHP里数组和字符串的互转是一个基础操作,但选择用哪种方式取决于数组的结构复杂度和使用目的。implode()join()适合简单列表的粘合与还原;json_encode()适合复杂结构保持完整性的序列化。把这几个函数用熟,处理数据存储和传输时的格式转换需求就会顺手很多。

← PHP数组函数详解:用内置函数高效操作数组数据 没有下一篇了 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号