【问题标题】:Display 3-Tier json array using PHP使用 PHP 显示 3 层 json 数组
【发布时间】:2013-12-25 23:37:52
【问题描述】:

我有一个我想使用 PHP 读取的 json 文件,我使用下面的代码来显示数据,直到第二个数组,但我不知道如何获取第三个数组。下面是我的php代码和json文件,

$json = file_get_contents('data.json');
$data = json_decode($json,true);
$counters = $data['counters']['counters'];
foreach ($counters as $row)
{
echo $name = $row['name']."<br>";
}

上面的代码输出是C0

我的 JSON 文件有以下数据

    {
    "counters":
        {
        "id":"#F02D27B324BF41AF",
        "counterCount":14,
        "counters":[
            {
            "name":"C0",
            "total":{"request":712,"in":22982423,"out":13787213},
            "html":{"request":105,"in":2073293,"out":485846}
            },
{
            "name":"C1",
            "total":{"request":712,"in":22982423,"out":13787213},
            "html":{"request":105,"in":2073293,"out":485846}
            }]
        },
    "status":
        {
        "version":"0.0.0.2",
        "command":"getdata",
        "opf":"json",
        "error":false,
        "code":0
        }
    }

我的代码向我显示 nameC0 并且我想显示 data inside total 和 htmlrequest, in出去

【问题讨论】:

  • 你能展示一些你预期的样本输出吗?
  • @kumar_v 我更新了我的问题并展示了我的输出
  • 如果你需要输出 json 只是为了调试,你可以使用 echo '
    '; var_dump($data);回声'
    ';将其输出为 php 嵌套数组。或者您可以只输出输入文件内容 $json = file_get_contents('data.json');回声 $json;

标签: php json


【解决方案1】:

你可以试试这样的..

foreach ($counters as $row) {
    echo $name = $row['name']."<br>";
    echo $total = $row['total']['request']." ".$row['total']['in']." ".$row['total']['out']."<br>";
    echo $html = $row['html']['request']." ".$row['html']['in']." ".$row['html']['out']."<br>";
}

【讨论】:

  • 我也以同样的方式解决了它并发布了我的答案,但我点击你的答案作为接受:) 非常感谢
【解决方案2】:

您访问它的方式与任何其他多维数组相同:

echo $name = $row['html']['request']."<br>"

或对其进行迭代(即使用foreach())。

【讨论】:

  • 不,因为解码是在数组中(见第二个参数)
  • 真的。我只是看了json
  • 我用你的方法解决了,非常感谢你的回答:)
【解决方案3】:

您的错误是您忘记了顶级数组。你的[counters][counters] 是数组,所以你需要这样做:

foreach($data['counters']['counters'] as $item)
{
   foreach($item as $key=>$value)
   {
      echo('<br>'.$key.' = ');
      if(is_array($value))
      {
         foreach($value as $sub=>$number)
         {
            echo($sub.':'.$number).' ';
         }
       }
      else
         echo($value);  
   }
}

-输出将是:

名称 = C0 总计 = 请求:712 输入:22982423 输出:13787213 html = 请求:105 输入:2073293 输出:485846

【讨论】:

  • 我解决了,但我喜欢你让它变得更简单的方式。我只是更新我的数组,现在是它的 C0 和 C1。我们可以只显示 1 个结果而不是循环遍历所有数据吗?
  • 是的,然后您可以摆脱更高级别的循环并遍历$data['counters']['counters'][0]
【解决方案4】:

之后你应该拥有一切 json_decode($json,true);

试试

foreach ($counters as $key => $value) {
    if ($key == "name") {
       echo $value; // should output "C0"
    } else if ($key == "total") {
       // now the value is another array object
       echo $value["request"]; // should output 712
    } else if ($key == "html") {
       // same here
       echo $value["request"]; // should output 105
    }
}

我建议设置 xdebug 并开始调试类似的东西,然后你可以检查你的 $data 变量,并且可以在第一次尝试中完成所有事情:)

【讨论】:

    【解决方案5】:

    谢谢大家,我解决了:) 要在total和html中显示数据,我们只需要简单的写1行,

    $name = $row['total']['request'];
    

    它的输出将是 712

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-11
      • 2013-09-10
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多