如何将SQL数组类型字段值转换为PHP数组?
解决json_decode解析特殊字符串返回空的问题
你遇到的问题根源是$customlabel的格式并非标准JSON:
- JSON数组要求用方括号
[]包裹,但你的字符串用了大括号{} - JSON规范里所有字符串必须用双引号包裹,但
new和de没有双引号,导致json_decode无法识别结构,返回空值。
下面提供两种可行的解决办法:
方法一:修正为标准JSON格式后解析
通过字符串替换和正则处理,把原格式转换成符合JSON规范的结构,再用json_decode解析:
$customlabel = "{new,\"tree test123\",de}"; // 替换大括号为方括号 $fixedStr = str_replace(['{', '}'], ['[', ']'], $customlabel); // 给未被双引号包裹的单词添加双引号 $fixedStr = preg_replace('/(?<!")(\w+)(?!")/', '"$1"', $fixedStr); // 解析为PHP数组 $result = json_decode($fixedStr, true); print_r($result);
执行后会得到正确数组:Array ( [0] => new [1] => tree test123 [2] => de )
方法二:直接按规则拆分字符串
如果这个字段的格式固定为{元素1,元素2,...},可以直接拆分处理,避免依赖JSON解析:
$customlabel = "{new,\"tree test123\",de}"; // 移除首尾的大括号 $trimmed = trim($customlabel, '{}'); // 拆分元素(忽略双引号内的逗号) $items = preg_split('/,(?=(?:[^"]*"[^"]*")*[^"]*$)/', $trimmed); // 去除每个元素的首尾引号 $result = array_map(fn($item) => trim($item, '"'), $items); print_r($result);
这个方法更灵活,即使元素内部包含逗号(比如"tree,test123")也能正确拆分。
内容的提问来源于stack exchange,提问作者Azima
相关产品推荐
相关产品推荐

