php 5.6 数组 Undefined offset: 1 但是1是有值的 这是什么情况?

在php5会有这个问题,感觉有点反直觉,记录一下吧。

<?php
$a = json_encode(array('1' => '哈哈'));

$b = (array)json_decode($a);

var_dump($b);

foreach ($b as $key => $value)
{
    var_dump($key);
    var_dump($b[$key]);
}

image.png

阅读 2.5k
2 个回答

https://www.php.net/manual/zh/language.types.array.php#language.types.array.casting

转换为数组

如果将 object 类型转换为 array,则结果为一个数组,其单元为该对象的属性。
键名将为成员变量名,不过有几点例外:
整数属性不可访问;
私有变量前会加上类名作前缀;
保护变量前会加上一个 '*' 做前缀。
这些前缀的前后都各有一个 NUL 字节。
未初始化的类型属性将会被丢弃。


json_decode 的第二个参数 true 写了么?
是不是解出来的是个 stdClass ?

你把array打印出来,肯定是一个object而不是数组,object放循环里跑出现异常很正常。json_decode的时候第二个参数如果填true的话,才是数组。

填了 $key => int(1)
没填 $key => string(1) "1"
看打印情况你是没填的。

image.png

$b = (array)json_decode($a);
//改成
$b = json_decode($a,true);
//就能解决问题了
//强转类型的瓜是不甜的
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题