如何在PHP中使用字符串作为数组键访问多维数组元素?
PHP 多维数组通过字符串键路径访问的实现方法
方法一:解析键路径(推荐,安全可控)
先从字符串中提取所有独立键名,再通过循环逐层访问数组,完全避免代码注入风险,是最稳妥的方案:
// 初始化多维数组 $array['first_key']['second_key'] = 'value'; // 待解析的键路径字符串 $keys = "['first_key']['second_key']"; // 用正则匹配提取所有单引号包裹的键名 preg_match_all("/'([^']+)'/", $keys, $matches); $keySequence = $matches[1]; // 得到数组:['first_key', 'second_key'] // 逐层访问数组 $targetValue = $array; foreach ($keySequence as $key) { // 检查当前层级是否存在该键,避免报错 if (isset($targetValue[$key])) { $targetValue = $targetValue[$key]; } else { // 键不存在时的处理逻辑,可根据需求调整 $targetValue = null; break; } } echo $targetValue; // 输出:value
方法二:使用eval(不推荐,存在安全风险)
如果能确保$keys的来源绝对安全(比如完全由自己生成,无外部输入),可以用eval直接执行拼接后的代码:
$array['first_key']['second_key'] = 'value'; $keys = "['first_key']['second_key']"; // 拼接代码并执行 eval("\$targetValue = \$array{$keys};"); echo $targetValue; // 输出:value
⚠️ 注意:eval会执行任意传入的PHP代码,若$keys包含恶意内容(比如来自用户输入的篡改),会直接导致代码注入攻击,因此非必要场景绝不推荐使用。
内容的提问来源于stack exchange,提问作者Rahmat Hidayat
相关产品推荐
相关产品推荐

