PHP如何将特定键值格式字符串转为关联数组(保留逗号)
实现PHP键值对字符串转关联数组的方法
你遇到的问题是:直接将类似数组语法的字符串传入array(),只会把整个字符串当作数组的单个元素,无法得到期望的关联数组。下面提供几种可行的实现方式:
方法1:正则表达式解析(安全推荐)
这种方法无需执行代码,安全性更高,适配固定格式的目标字符串:
$string = "'id_konversi_aktivitas' => 'f4d943e7', 'nim' => '180218038'"; // 匹配单引号包裹的键和值 $pattern = "/'([^']+)' => '([^']+)'/"; preg_match_all($pattern, $string, $matches); // 将匹配到的键和值组合成关联数组 $result = array_combine($matches[1], $matches[2]); print_r($result);
执行后输出结果:
Array ( [id_konversi_aktivitas] => f4d943e7 [nim] => 180218038 )
方法2:转换为JSON格式后解码
通过字符串替换将目标格式转为JSON,再用json_decode解析:
$string = "'id_konversi_aktivitas' => 'f4d943e7', 'nim' => '180218038'"; // 替换单引号为双引号,替换=>为JSON的键值分隔符: $jsonStr = str_replace(["'", "=>"], ['"', ':'], $string); // 包裹成标准JSON对象格式 $jsonStr = "{" . $jsonStr . "}"; $result = json_decode($jsonStr, true); print_r($result);
这种方法操作简单,但要确保字符串内没有额外的单引号或特殊字符,否则可能解析失败。
方法3:使用eval(注意安全风险)
如果字符串来源完全可信(比如自己生成的固定内容),可以直接用eval执行代码:
$string = "'id_konversi_aktivitas' => 'f4d943e7', 'nim' => '180218038'"; eval("\$result = array($string);"); print_r($result);
⚠️ 重要提醒:eval会执行传入的任意代码,如果字符串来自用户输入或不可信来源,绝对不能使用这种方法,会引发严重的安全漏洞。
内容的提问来源于stack exchange,提问作者Raja Sambel
相关产品推荐
相关产品推荐

