0

我正在尝试更改 PHP 脚本,以便它可以接收 JSON 对象并使用给定的 JSON 对象。一切正常,直到我尝试使用 for 循环遍历转换后的 JSON 数组对象(又名“东西”)。

我在这里做错了什么:

$json = '{

    "foo":  "hi",
    "bar":  "bye"
    "stuff": [{"widget":"dd"},{"thing":"cc"},{"wcha":"dd"}] 
}';

$arr = json_decode($json, true);
$foo = $arr['foo']; //works fine
$bar = $arr['bar']; //works fine

//old way that worked:
//$stuff    = array("widget" => "dd", "thing" => "cc", "wcha" => "dd");
//new way that does not work:
$stuff = $arr['stuff'];
...

//This is where the problem is:
foreach ($stuff as $key => $value){...

for 循环中的问题是 $key 是一个整数(不是实际值),而 $value 是单词“数组”(不是实际值)。

4

3 回答 3

3

它正在做它应该做的事情。问题是你没有完全正确地理解它。

“东西”是一个对象数组。因此,当您对其进行解码时,生成的 PHP 数组是这样的:

[stuff]=>
array(3)
  {
  [0]=>
  array(1)
    {
    [widget]=>string(2) "dd"
    }
  [1]=>
  array(1)
    {
    [thing]=>string(2) "cc"
    }
  [2]=>
  array(1)
    {
    [wcha]=>string(2) "dd"
    }
  }

因此,当您调用foreach它时,您将从那里获取各个数组。

我认为你的 JSON 应该是:

"stuff": {"widget":"dd","thing":"cc","wcha":"dd"}

要么,要么你的 PHP 代码应该是:

foreach($stuff as $element) {
    list($key,$value) = each($element);
    // now do stuff
}
于 2012-04-26T21:46:20.323 回答
2

当然$key是整数=)。[{"widget":"dd"},{"thing":"cc"},{"wcha":"dd"}]这是你的数组,所以 key = 0 对应于对象{"widget":"dd"},所以第四个。

要了解这些元素,请尝试:$value->widget$value->thing.

由于 stuff 数组中的对象并非都具有相同的成员,因此您可能希望重新考虑构建对象的方式。

于 2012-04-26T21:45:30.523 回答
1

将您的 JSON 更改为

$json = '{
  "foo":  "hi",
  "bar":  "bye"
  "stuff": {"widget":"dd",
            "thing":"cc",
            "wcha":"dd"} 
}';

这种方式的东西包含另一个字典,如结构。

在您的示例中,您使用 [] 用于封装数组,而不是 json 对象,因此您拥有的整数只是项目的索引 {"widget":"dd"}, {"thing":"cc "} 和 {"wcha":"dd"} 在您的数组中。对于您的第一次迭代,$value["widget"] 应该等于 "dd"。

于 2012-04-26T21:48:06.350 回答