从stdClass转换后的array_key_exists

时间:2016-08-24 11:04:17

标签: php stdclass array-key-exists

我知道如果我想将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的工作原理以及为什么我应该这样做(不)避免将对象类型转换为数组。

1 个答案:

答案 0 :(得分:0)

有效整数的数字键在PHP中自动转换为整数。

来自manual

  

密钥可以是整数或字符串。值可以是任何类型。 ...包含有效整数的字符串将强制转换为整数类型。例如。键“8”实际上将存储在8下。另一方面,“08”将不会被强制转换,因为它不是有效的十进制整数。