我有这段代码:
<?php
$array = array ( array ('pcs'=>'23', 'kg'=>'3'),
array ('pcs'=>'24', 'kg'=>'4'),
array ('pcs'=>'25', 'kg'=>'5'));
echo '<pre>';
print_r($array);
$array = json_encode($array);
echo $array;
$array = json_decode($array);
echo '<pre>';
print_r($array);
?>
以及输出:
Array
(
[0] => Array
(
[pcs] => 23
[kg] => 3
)
[1] => Array
(
[pcs] => 24
[kg] => 4
)
[2] => Array
(
[pcs] => 25
[kg] => 5
)
)
[{"pcs":"23","kg":"3"},{"pcs":"24","kg":"4"},{"pcs":"25","kg":"5"}]
Array
(
[0] => stdClass Object
(
[pcs] => 23
[kg] => 3
)
[1] => stdClass Object
(
[pcs] => 24
[kg] => 4
)
[2] => stdClass Object
(
[pcs] => 25
[kg] => 5
)
)
为什么我的数组变为stdClass Object
?我可以像数组一样操纵stdClass Object
吗?
更新:当我尝试回复$array[0]['pcs']
:
Fatal error: Cannot use object of type stdClass as array in /home/*** on line **
答案 0 :(得分:4)
答案 1 :(得分:1)
来自PHP Manual:
json_decode()用于解码
JSON
字符串:
在TRUE
中使用第二个参数作为json_decode()
:
返回的对象将被转换为关联数组。
为您解决方案:
$array = json_decode($array,TRUE); // use second param as TRUE in your code.
理解的一些基本示例:
示例1:
<?php
$json = '{"test":"test","test2":"test2"}'; // json string
echo "<pre>";
print_r(json_decode($json)); // without using second param
?>
结果(作为对象返回):
stdClass Object
(
[test] => test
[test2] => test2
)
示例2:
<?php
$json = '{"test":"test","test2":"test2"}';
echo "<pre>";
print_r(json_decode($json,TRUE)); // with second param true
?>
<强>结果:强>
Array
(
[test] => test
[test2] => test2
)
答案 2 :(得分:0)
那是标准的PHP行为。 json_decode()
会将传入的数据转换为类stdClass
的对象数组。
你仍然可以访问所有元素,但你必须做更多的OOP:
echo $array[0]->pcs;
echo $array[0]->kg;
如果您希望json_decode()
重现您的初始数组,请使用该函数的第二个选项:
$array = json_decode($array, true);
echo $array[0]['pcs'];
echo $array[0]['kg'];
答案 3 :(得分:0)
这是正常吗?
是,因为json_decode
基本上会返回一个对象,因为你没有指定第二个参数,所以它应该返回一个对象,而不是一个数组。
当为TRUE时,返回的对象将被转换为关联数组。
所以要使它返回一个数组,就是使第二个参数等于true。
$array = json_decode($array,true);