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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:34:54