当您对d 值(使用)进行array
类型转换时,PHP 会创建一个带有字符串索引的数组:json_decode
$assoc = false
$a = (array)json_decode('{"7":"value1","8":"value2","9":"value3","13":"value4"}');
var_export($a);
//array (
// '7' => 'value1',
// '8' => 'value2',
// '9' => 'value3',
// '13' => 'value4',
//)
由于某种原因,这些索引无法访问:
var_dump(isset($a[7]), isset($a['7']));
//false
//false
当您尝试通过 PHP 本身创建相同的数组时,它是使用数字索引创建的(字符串会自动转换),并且可以使用字符串和数字访问值:
$c = array('7' => 'value1', '8' => 'value2', '9' => 'value3','10' => 'value4');
var_export($c);
var_dump(isset($c[7]), isset($c['7']));
//array (
// 7 => 'value1',
// 8 => 'value2',
// 9 => 'value3',
// 13 => 'value4',
//)
//
//true
//true
有人知道这里发生了什么吗?是否是旧 PHP 版本的一些错误(该问题似乎已在 PHP 版本 >= 7.2 上得到修复,但我在changelog中找不到任何相关内容)?
这是正在发生的事情的演示:https ://3v4l.org/da9CJ 。