Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php数组-can';无法从数组中获取值_Php_Arrays - Fatal编程技术网

Php数组-can';无法从数组中获取值

Php数组-can';无法从数组中获取值,php,arrays,Php,Arrays,这段代码对我来说不符合逻辑。我能得到关于这种行为的任何解释以及如何修复它吗 $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 = '{"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?
这是按以下方式执行的:

(array)$data["id"]
即,
$data['id']
的结果被强制转换为数组;不将
$data
强制转换为数组,然后访问其
id
索引

如果需要数组,请使用
json\u decode(…,true)
。否则,将对象作为对象处理,而不是将它们反复转换为数组。

您不能这样做

(array)($data["id"])
试试看

print_r((array)$data["id"]);

json\u decode
返回具有属性的对象,而不是数组

混合json解码(字符串$json[,bool$assoc=false[,int$depth=512[,int$options=0]])

将true(bool值)传递给json_decode函数中的第二个参数,以获取关联数组。然后您将能够以数组的形式访问它

或者,您可以使用
->
操作符访问属性

因此,在你的情况下:

$d = (array)$data;
print_r($d["id"]);

使用json_decode返回一个对象(例如$data->id)。

如果希望它返回一个数组,请使用json_decode($data,true)

使用
json\u decode($data)
,您将获得一个对象。要获取关联数组,请将第二个参数设置为
TRUE
。有关更多信息,请参阅。感谢您的快速回复。这是事实。你问题中显示的输出也不正确。第二条语句将输出一个错误“致命错误:无法将stdClass类型的对象用作数组”。(如果您还没有)使用
var_dump
获取您正在处理的类型结构的信息。好的,我现在明白了。我有一个对象,但我试图像数组一样使用它。谢谢你的帮助和-1.很好的解释+1@deceze,对于200000用户来说,这不是有点太复杂了吗?也许你现在应该继续问“缺少分号”的问题。@tereško是的,我觉得这里有点不对劲…^;;但还有谁会做出这样的解释。。。?
print_r($data->id);