我知道如果我想将 JSON 作为数组,最好使用第二个参数调用 json_decode 为 true,但是 PHP 允许类型转换stdClass
为array
,然后会发生此问题:
<?php
$array = (array) json_decode('{"1":"1","2":"1","3":"1","4":"1","12":"1"}');
var_dump($array);
var_dump(array_key_exists('12', $array));
结果将是:
array(5) {
["1"]=>
string(1) "1"
["2"]=>
string(1) "1"
["3"]=>
string(1) "1"
["4"]=>
string(1) "1"
["12"]=>
string(1) "1"
}
bool(false)
另外,当我尝试制作时:
$array['12'] = 'X';
'12' 将被类型转换为 INT,所以当 var_dumping 时我将在数组中拥有键 12 和 '12'。有人知道为什么吗?
请不要说我需要使用json_decode(..., true)
- 我真的知道并理解这一点,我只是想知道这里发生了什么,以更好地了解 PHP 的工作原理以及为什么我应该(不)避免将对象类型转换为数组。