You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中键存储在变量时,如何从JSON对象取值?

动态获取嵌套数组的值

遇到这种动态路径的问题,直接拼接字符串肯定行不通,我们可以把路径字符串解析成可遍历的键数组,然后一步步深入嵌套数组取值。这里有个安全且可靠的方案:

步骤1:解析路径字符串

首先需要把$key里的路径提取出来,比如把'["toppings"][2]["type"]'转换成['toppings', 2, 'type']。可以用正则表达式来匹配每个键:

$key = '["toppings"][2]["type"]';
// 匹配所有在[]里的内容,忽略引号
preg_match_all('/["\']?([^"\'\]]+)["\']?/', $key, $matches);
$pathSegments = $matches[1]; // 得到 ['toppings', '2', 'type']

步骤2:遍历路径取值

写一个通用函数,接收嵌套数组和路径数组,逐层访问:

function getNestedValue(array $data, array $path) {
    $current = $data;
    foreach ($path as $segment) {
        // 如果是数字类型的键,转换成整数(因为数组索引是int)
        if (is_numeric($segment)) {
            $segment = (int)$segment;
        }
        // 检查当前层级是否存在该键,避免报错
        if (!isset($current[$segment])) {
            return null; // 或者抛出异常,根据你的业务需求处理
        }
        $current = $current[$segment];
    }
    return $current;
}

步骤3:调用函数获取值

把解析后的路径和$yummy传入函数即可:

$yummy = json_decode($json, true);
$value = getNestedValue($yummy, $pathSegments);
echo $value; // 输出 Maple

为什么不推荐用eval?

可能有人会想到用eval("\$value = \$yummy{$key};");来直接执行,但强烈不建议这么做:如果$key是用户输入或者不可信来源的内容,会存在严重的代码注入风险,导致安全问题。上面的正则+遍历方法更安全,也更容易调试和维护。

内容的提问来源于stack exchange,提问作者DMP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:43:47