Laravel PHP 如何将数据库存储的字符串格式数组转换为可用PHP数组
解决方案
方案1:JSON转换(推荐,安全)
这种方式没有代码执行风险,适合绝大多数场景:
- 将字符串中的单引号替换为双引号,把
=>替换为JSON标准的冒号: - 用
json_decode解析为数组
示例代码:
// 从数据库取出的原始字符串 $rawStr = "['type' => 1, 'status' => 2]"; // 替换为合法JSON格式 $jsonFormatStr = str_replace(["'", "=>"], ['"', ':'], $rawStr); // 解析为PHP数组,第二个参数设为true返回数组而非对象 $resultArr = json_decode($jsonFormatStr, true); // 此时$resultArr就是可直接使用的数组:['type' => 1, 'status' => 2]
如果数组值本身包含单引号或者=>字符串,补充对应转义逻辑适配即可。
方案2:eval解析(仅适用于100%可信的字符串)
如果你完全确定该数据库存储的字符串没有任何用户可控的恶意内容,可以用eval直接解析,缺点是存在极高的代码注入风险,绝对不要用在有外部输入的场景:
$rawStr = "['type' => 1, 'status' => 2]"; eval('$resultArr = ' . $rawStr . ';'); // 直接得到目标数组
最佳实践建议
后续如果需要存储数组类结构到数据库,优先选择两种存储格式:
- 标准JSON格式,读取后直接用
json_decode解析 - 用PHP自带的
serialize()序列化存储,读取后用unserialize()反序列化,可直接得到原数组结构,无需额外适配解析逻辑
内容的提问来源于stack exchange,提问作者Ayman Alyamani
相关产品推荐
相关产品推荐

