PHP如何遍历非数组结构JSON中的每个ID?
解决PHP遍历JSON对象时获取ID键的问题
嘿,我完全懂你碰到的卡点!你的JSON结构里,id1、id2其实是顶层对象的键名,但你现在的foreach循环只遍历了对应的值(也就是每个Area的详情对象),没捕获到这些ID键对吧?
两种可行的解决方案:
方案1:直接遍历对象的键值对
json_decode默认会把JSON转成PHP对象,你只需要在foreach里同时声明键(ID)和值的变量就行:
$doc = '{ "id1": { "AreaN": "ワールドバザール", "AreaM": "ワールドバザール" }, "id2": { "AreaN": "ワールドバザール", "AreaM": "ワールドバザール" } }'; $json = json_decode($doc); if (count($json) > 0) { // 同时获取ID键和对应的Area对象 foreach($json as $id => $area) { echo "当前ID:{$id}\n"; echo "Area名称(日文):{$area->AreaN}\n"; echo "Area名称(カタカナ):{$area->AreaM}\n\n"; } }
运行后就能输出id1、id2这些ID,以及对应的区域信息。
方案2:转成关联数组后遍历
如果你更习惯用数组操作,可以给json_decode加第二个参数true,把JSON转成PHP关联数组,之后同样可以用键值对遍历,或者单独获取所有ID:
$doc = '{ "id1": { "AreaN": "ワールドバザール", "AreaM": "ワールドバザール" }, "id2": { "AreaN": "ワールドバザール", "AreaM": "ワールドバザール" } }'; $json = json_decode($doc, true); // 转成关联数组 // 方式A:直接键值对遍历 foreach($json as $id => $area) { echo "当前ID:{$id}\n"; echo "Area名称(日文):{$area['AreaN']}\n"; echo "Area名称(カタカナ):{$area['AreaM']}\n\n"; } // 方式B:先获取所有ID列表,再逐个处理 $allIds = array_keys($json); foreach($allIds as $id) { $area = $json[$id]; // 这里写你需要的业务逻辑 }
为什么原来的代码拿不到ID?
你之前的foreach($json as $area)只提取了每个键对应的值(也就是包含AreaN和AreaM的对象),没有捕获顶层对象的键名(也就是id1、id2),所以自然拿不到这些ID啦~
内容的提问来源于stack exchange,提问作者tsukimi
相关产品推荐
相关产品推荐

