1

我知道如果我想将 JSON 作为数组,最好使用第二个参数调用 json_decode 为 true,但是 PHP 允许类型转换stdClassarray,然后会发生此问题:

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

4

1 回答 1

0

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

手册

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

于 2016-08-24T11:14:55.857 回答