首页 新闻 赞助 找找看

php5.6.14发现的一个问题

0
[已解决问题] 解决于 2016-03-31 12:55

我的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.

玩物尚智的主页 玩物尚智 | 菜鸟二级 | 园豆:202
提问于:2016-03-26 14:36
< >
分享
最佳答案
1

 

 

用这种方式  (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) "会议室"

 

 

 

 

 

 

奖励园豆:5
电磁魔王喵喵 | 小虾三级 |园豆:1339 | 2016-03-31 12:02

好的,谢谢您的回复,问题我已经解决了,当时发上来只是想跟大家一起探讨下,以后多多交流.

玩物尚智 | 园豆:202 (菜鸟二级) | 2016-03-31 12:53
其他回答(1)
0

不是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.

 

youxin | 园豆:204 (菜鸟二级) | 2016-03-28 12:46

字符串的"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];
       }

都会报错.

支持(0) 反对(0) 玩物尚智 | 园豆:202 (菜鸟二级) | 2016-03-28 13:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册