我的php版本是php5.6.14,用的是xampp环境,
今天写代码偶然发现一个问题,请各位大神一起分析下:
$str = '{"0":"办公室","1":"会议室","2":"室外场地"}'; $obj = json_decode($str); var_dump($obj); $arr = (array) $obj; var_dump($arr); echo $arr[0];
发现输出$arr[0]的时候回报index undefined,但是问题是执行var_dump($arr);发现它已经是一个数组,并且0下标有值,请各位大神分析下,看看是不是php的bug.
用这种方式 (array) $obj 将 对象 转换成 数组 时,其实 只是 把这个变量的类型转换了一下,它内部的 键 和值 并没有转换,所以 ,那个 "键" 仍然是 字符 。
当你用 $arr[1] 或者 $arr["1"] 访问数组时,实际上这两种方式是一样的,php 会把 $arr["1"] 也转换成 $arr[1] 。
然而这个时候,你的数组并没有一个 下标为 1 的 值,,,只有 键 为 "1" 的 值 ,,所以会提示 "索引未定义"。
如果 你想把 json 转换成数组的形式,可以这样做
$str = '{"0":"办公室","1":"会议室","2":"室外场地"}'; $arr = json_decode($str,true); // json_decode 的第二个参数如果为 true 时 ,函数将返回 array var_dump($arr[1]); //输出结果 string(9) "会议室"
好的,谢谢您的回复,问题我已经解决了,当时发上来只是想跟大家一起探讨下,以后多多交流.
不是bug,你仔细看输出:
object(stdClass)#1 (3) {
["0"]=>
string(9) "办公室"
["1"]=>
string(9) "会议室"
["2"]=>
string(12) "室外场地"
}
array(3) {
["0"]=>
string(9) "办公室"
["1"]=>
string(9) "会议室"
["2"]=>
string(12) "室外场地"
}
数组的的key是字符串"0",而不是数值0. 因为你json里面写的是对象,而不是array.
字符串的"0"也报错.甚至我
$str = '{"0":"办公室","1":"会议室","2":"室外场地"}'; $obj = json_decode($str); var_dump($obj); $arr = (array) $obj; var_dump($arr); foreach ($arr as $key => $value) { echo $arr[$key]; }
都会报错.