2

假设我的 JSON 是这样的:

{
  "achievement": [
    {
      "title": "All Around Submitter",
      "description": "Get one piece of content approved in all six areas.",
      "xp": 500,
      "level_req": 1
    },
    {
      "title": "World-wide Photo Journalist",
      "description": "Get one photo approved in all six areas.",
      "xp": 500,
      "level_req": 1
    },
    {
      "title": "Ready for Work",
      "description": "Sign up and get validated",
      "xp": 50,
      "level_req": 1
    },
    {
      "title": "Asian Pride",
      "description": "Get ten pieces of content approved to a club in an Asian nation.",
      "xp": 1500,
      "level_req": 1
    }
  ]
}

我的PHP代码是这样的,所以我通过那个json文件加载......:

<?php

$string = file_get_contents("achievements.json");
$json_a=json_decode($string,true);

foreach ($json_a as $key => $value){
  echo  $value[0]['title'] . " <br />";
}

?>

然而,它只输出第一个数组。我知道。只有 1. 但是foreach循环呢?为什么它不是为每一行循环?

4

3 回答 3

7

您正在循环访问只有一个键的顶级数组:achievement

相反,你应该

foreach ($json_a['achievement'] as $key => $value){
  echo  $value['title'] . " <br />";
}

提示:[0]是某种代码气味。

于 2012-09-16T22:22:43.557 回答
1

这里试试这个

$string = file_get_contents("achievements.json");
$json_a=json_decode($string,true);

foreach ($json_a['achievement'] as $key => $value){
  echo  $value['title'] . " <br />";
}

你正在循环你的顶级数组,但是在你解析你的 json 之后,你得到:

array(1) {
  ["achievement"]=>
  array(4) {
  //your other arrays
  }
}
于 2012-09-16T22:24:50.930 回答
0

它不起作用,因为您正在循环的数组只有一个键,achievements这是您返回的数组json_decode(),给定您当前的 json。循环通过它,你会得到你所追求的:

foreach ($json_a['achievement'] as $key => $value){
    echo $value['title'] . "<br />";
}
于 2012-09-16T22:23:49.603 回答