我正在尝试更改PHP脚本,以便它可以接收JSON对象并使用给定的JSON对象。一切正常,直到我尝试使用for循环循环转换来自JSON数组的对象(也就是'stuff')。
我在这里做错了什么:
$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是'Array'(不是实际值)。
答案 0 :(得分:3)
它正在做它应该做的事情。问题是你并没有完全理解它。
“stuff”是一个对象数组。因此,当您对其进行解码时,生成的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
}
答案 1 :(得分:2)
当然$key
是一个整数=)。 [{"widget":"dd"},{"thing":"cc"},{"wcha":"dd"}]
这是你的数组,所以key = 0对应于对象{"widget":"dd"}
,所以第四。
要了解元素,请尝试:$value->widget
或$value->thing
。
由于stuff数组中的对象并非都具有相同的成员,因此您可能希望重新考虑构造对象的方式。
答案 2 :(得分:1)
将您的JSON更改为
$json = '{
"foo": "hi",
"bar": "bye"
"stuff": {"widget":"dd",
"thing":"cc",
"wcha":"dd"}
}';
这样东西包含另一个字典,比如结构。
在您的示例中,您使用的是[]用于封装数组的人,而不是json对象,因此您拥有的整数只是项目的索引{“widget”:“dd”},{“thing” :数组中的“cc”}和{“wcha”:“dd”}。对于第一次迭代,$ value [“widget”]应该等于“dd”。