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

PHP中未知键名时如何遍历多维JSON数组提取数据?

处理测验管理多维JSON数组的PHP数据提取问题

问题分析

你的代码核心问题是错误假设questions下的子项是嵌套数组(取$val[0]),但实际上这些动态ID(如jvaso、da3gw)对应的直接是问题对象,无需额外嵌套遍历。

模拟JSON结构参考

还原符合你描述的JSON结构(辅助理解逻辑):

[
  {
    "questions": {
      "jvaso": {
        "title": "问题1:PHP基础语法",
        "options": ["变量声明", "函数定义", "类继承"]
      },
      "da3gw": {
        "title": "问题2:JSON解析",
        "options": ["json_encode", "json_decode", "json_parse"]
      }
    }
  }
]

修正后的代码

$arr = json_decode($contenu, true);
$donnees = '';

// 校验结构合法性,避免报错
if (isset($arr[0]['questions']) && is_array($arr[0]['questions'])) {
    foreach ($arr[0]['questions'] as $questionId => $question) {
        // 提取问题标题
        if (isset($question['title'])) {
            $donnees .= $question['title'] . '<br>';
        }
        
        // 若需提取可选答案,添加以下逻辑
        if (isset($question['options']) && is_array($question['options'])) {
            foreach ($question['options'] as $option) {
                $donnees .= ' · ' . $option . '<br>';
            }
        }
    }
}

关键说明

  • 直接遍历$arr[0]['questions']的键值对,$questionId就是你提到的动态ID,$question是对应的问题数据对象
  • 增加isset和is_array判断,避免因JSON结构缺失导致的Undefined index或遍历错误
  • 如需提取其他属性(如分数、类型),直接从$question中访问对应键名即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:41:07