最常用的是explode(),适合单字符分隔;str_split()用于按长度拆字符数组,但utf-8中文需mb_str_split();preg_split()处理复杂分隔逻辑;json_decode()/unserialize()仅适用于合法序列化字符串。

用 explode() 拆分固定分隔符的字符串
这是最常用也最直接的方式,适合按单个字符(如逗号、空格、竖线)切分字符串。注意它只支持字符串分隔符,不支持正则。
常见错误是传入空字符串或 null 给第一个参数,会导致警告;或者忽略第二个参数为空时返回 [""] 而非空数组。
-
explode(',', 'a,b,c')→['a', 'b', 'c'] -
explode(' ', 'hello world test')→ 注意中间两个空格会生成一个空元素:['hello', 'world', '', 'test'] - 想过滤空元素?得自己加
array_filter($arr),explode不做这个
用 str_split() 按长度拆成字符数组
当你要把字符串逐字变成数组(比如处理验证码、密码校验),就用这个。它不看内容,只按字节数切——对 ASCII 安全,但对 UTF-8 中文可能出错。
例如 str_split('你好', 1) 在默认编码下可能返回乱码或截断,因为一个中文占 3 字节。真要支持多字节,请用 mb_str_split()(PHP 7.4+)或手动配合 mb_substr()。
-
str_split('abc', 2)→['ab', 'c'] -
str_split('a')→['a'](省略第二参数默认为 1) - 别拿它处理带 emoji 或中文的字符串,除非你确认编码且 PHP 版本够新
用 preg_split() 处理复杂分隔逻辑
当分隔符不固定(比如“逗号或分号或多个空格”),或者要跳过空项、保留分隔符本身,就得上正则。比 explode 灵活,但也更慢、更易写错。
典型坑是忘记加 PREG_SPLIT_NO_EMPTY 标志,导致一堆空字符串;或者没转义特殊字符(如点号 .、星号 *)直接当字面量用。
-
preg_split('/[,;\s]+/', 'a, b; c d')→ 默认含空元素,结果可能是['a', 'b', 'c', 'd', ''] - 加标志:
preg_split('/[,;\s]+/', 'a,,b', -1, PREG_SPLIT_NO_EMPTY)→['a', 'b'] - 想保留分隔符?加
PREG_SPLIT_DELIM_CAPTURE,但要注意捕获组会进结果数组
注意 json_decode() 和 unserialize() 不是字符串转数组的通用解法
这两个函数只适用于**本身就是序列化格式的字符串**,比如 '["a","b"]' 或 'a:2:{i:0;s:1:"a";i:1;s:1:"b";}'。拿普通文本(如 'a,b,c')去 decode,会返回 null 且触发警告。
调试时看到 json_last_error() 返回 JSON_ERROR_SYNTAX,基本就是误用了。
-
json_decode('["x","y"]', true)→ 正确,返回['x','y'] -
json_decode('x,y,z', true)→ 错误,返回null,别硬套 - 从表单或文件读来的原始字符串,先判断格式再选函数,别默认走 JSON
explode() 就够了;剩下 10% 要么是字符级拆分,要么是规则复杂到必须正则——别一上来就写 preg_split,也别在中文环境下无脑用 str_split。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











