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

PHP遍历JSON多维数组:循环输出格式不符的问题求助

修正PHP遍历多维数组的输出格式问题

原始JSON数据

[
{
    "Sports":
    {
        "Series": "Worldcup"
    },
    "CricketTeams":
    {
        "India": "india.com",
        "Australia": "australia.com",
        "England": "england.com"
    }
},
{
    "Sports":
    {
        "Series": "Places"
    },
    "CricketTeams":
    {
        "Pune": "/pune",
        "Delhi": "/delhi",
        "Ranchi": "/ranchi/"
    }
},
{
    "Sports":
    {
        "Series": "man of the match"
    },
    "menuItems":
    {
        "Rohit": "rohit.com",
        "Kohli": "kohli.com"
    }
}]

原始遍历代码

for($i = 0; $i < count($json_data); $i++) {
    echo "<br>";
    foreach($json_data[$keys[$i]] as $item => $name) {
        echo $name['Series'];
    }
}

期望输出

Worldcup 
India
Australia
England

Places
Pune
Delhi
Ranchi

Man of the match
Rohit
Kohli

修正后的代码

命令行/纯文本输出版本

foreach ($json_data as $item) {
    // 输出Series名称
    echo $item['Sports']['Series'] . "\n";
    
    // 过滤掉Sports字段,获取对应的列表数组
    $list = array_diff_key($item, ['Sports' => true]);
    // 遍历列表输出键名
    foreach (reset($list) as $key => $value) {
        echo $key . "\n";
    }
    
    // 每组之间添加空行分隔
    echo "\n\n";
}

网页HTML输出版本

如果需要在网页中展示,将换行符替换为<br>标签:

foreach ($json_data as $item) {
    echo $item['Sports']['Series'] . "<br>";
    
    $list = array_diff_key($item, ['Sports' => true]);
    foreach (reset($list) as $key => $value) {
        echo $key . "<br>";
    }
    
    echo "<br><br>";
}

关键说明

  1. 用foreach直接遍历$json_data,避免原始代码中未定义的$keys变量导致的错误,写法更简洁安全。
  2. 先直接输出当前项的Series字段内容。
  3. 通过array_diff_key过滤掉Sports键,自动适配CricketTeams或menuItems这类动态列表字段。
  4. 遍历列表时输出键名(如India、Rohit),而非对应的值,匹配你的期望输出需求。
  5. 每组结束后添加空行,实现分组分隔的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:17:19