$data = '{"name":"CocaCola","price":1,"sync":0,"id":10792}';
$data = json_decode($data);
print_r((array)$data);
//Array ( [name] => CocaCola [price] => 1 [sync] => 0 [id] => 10792 )
print_r((array)$data["id"]);
//nothing?
这段代码对我来说不是逻辑。我可以获得有关此行为的任何解释以及如何解决此问题吗?
答案 0 :(得分:3)
(array)$data["id"]
这是作为
执行的(array)($data["id"])
即。 $data['id']
的结果被强制转换为数组;不$data
强制转换为数组,然后访问其id
索引。
如果您需要数组,请使用json_decode(..., true)
。否则将对象作为对象处理,而不是一遍又一遍地将它们转换为数组。
答案 1 :(得分:1)
json_decode
返回一个包含属性的对象,而不是数组。
http://uk3.php.net/json_decode
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
将true(bool值)传递给json_decode函数中的第二个参数,以获取关联数组。然后,您将能够以阵列形式访问它。
或者,您可以使用->
运算符访问属性。
所以在你的情况下:
print_r($data->id);
答案 2 :(得分:0)
你不能这样做
print_r((array)$data["id"]);
尝试改为
$d = (array)$data;
print_r($d["id"]);
答案 3 :(得分:0)
使用json_decode返回一个对象(例如$ data-> id) 如果您希望它返回一个数组,请使用json_decode($ data,true);