我知道如果我想将JSON作为数组,将第二个参数调用为json_decode更好,但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';
&#39; 12&#39;将被强制转换为INT,所以我将有12和12&#39;在var_dumping中的数组。有谁知道为什么?
请不要说我需要使用json_decode(..., true)
- 我真的知道并理解这一点,我只是想知道这里发生了什么,以便更好地理解PHP的工作原理以及为什么我应该这样做(不)避免将对象类型转换为数组。
答案 0 :(得分:0)
有效整数的数字键在PHP中自动转换为整数。
来自manual:
密钥可以是整数或字符串。值可以是任何类型。 ...包含有效整数的字符串将强制转换为整数类型。例如。键“8”实际上将存储在8下。另一方面,“08”将不会被强制转换,因为它不是有效的十进制整数。