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
相关产品推荐
相关产品推荐

