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

PHP如何获取JSON数据中的所有键名与对应值?

问题核心

你现有代码的问题在于,$json->data->after是一个索引数组,每一个元素都是仅包含单组键值对的对象。你第一层遍历拿到的$key是索引数组的下标(0、1、2...),第二层遍历时只捕获了值,没有捕获对应的键名,所以无法拿到google.com这类域名键。


方案1:JSON解析为关联数组(推荐)

在json_decode时传入第二个参数true,将整个JSON结构直接解析为关联数组,遍历的时候直接同时获取键和值即可,代码如下:

<?php 
// 第二个参数传true,JSON解析为关联数组
$json = json_decode('{
    "data": {
        "after": [{
            "google.com": "35"
        }, {
            "yahoo.com": "10"
        }, {
            "worldi.ir": "30"
        }, {
            "cnn.com": "554"
        }, {
            "scio.ir": "887"
        }],
        "before": [{
            "bbc.com": "44"
        }, {
            "rtl.com": "15"
        }, {
            "quran.com": "9"
        }, {
            "lap.com": "12"
        }, {
            "search.com": "13"
        }]
    }
}', true);

// 遍历after数组下的所有条目
foreach($json['data']['after'] as $item) {
    // 同时遍历每个条目的键(域名)和值(数值)
    foreach($item as $domain => $value) {
        echo "{$domain}: {$value}<br/>";
    }
}

// 若需要获取before下的键值,同理遍历$json['data']['before']即可
?>

输出结果:

google.com: 35
yahoo.com: 10
worldi.ir: 30
cnn.com: 554
scio.ir: 887

方案2:保留原对象解析逻辑

如果不想修改json_decode的参数,保持原对象解析格式,可以调整遍历逻辑如下:

<?php 
$json = json_decode('{
    "data": {
        "after": [{
            "google.com": "35"
        }, {
            "yahoo.com": "10"
        }, {
            "worldi.ir": "30"
        }, {
            "cnn.com": "554"
        }, {
            "scio.ir": "887"
        }],
        "before": [{
            "bbc.com": "44"
        }, {
            "rtl.com": "15"
        }, {
            "quran.com": "9"
        }, {
            "lap.com": "12"
        }, {
            "search.com": "13"
        }]
    }
}');

foreach($json->data->after as $item) {
    // 将单个对象转为数组后同时遍历键值
    foreach((array)$item as $domain => $value) {
        echo "{$domain}: {$value}<br/>";
    }
}
?>

输出结果和方案1完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:54:03