在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]);
}
在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]);
}
你把array打印出来,肯定是一个object而不是数组,object放循环里跑出现异常很正常。json_decode的时候第二个参数如果填true的话,才是数组。
填了 $key => int(1)
没填 $key => string(1) "1"
看打印情况你是没填的。
$b = (array)json_decode($a);
//改成
$b = json_decode($a,true);
//就能解决问题了
//强转类型的瓜是不甜的
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答613 阅读✓ 已解决
799 阅读
https://www.php.net/manual/zh/language.types.array.php#language.types.array.casting
转换为数组
如果将 object 类型转换为 array,则结果为一个数组,其单元为该对象的属性。
键名将为成员变量名,不过有几点例外:
整数属性不可访问;
私有变量前会加上类名作前缀;
保护变量前会加上一个 '*' 做前缀。
这些前缀的前后都各有一个 NUL 字节。
未初始化的类型属性将会被丢弃。
json_decode 的第二个参数 true 写了么?
是不是解出来的是个 stdClass ?