PHP 中作为数组键的数字字符串

php
2022-08-30 07:12:23

是否可以使用数字字符串作为PHP数组中的键,而不会将其转换为整数?"123"

$blah = array('123' => 1);
var_dump($blah);

指纹

array(1) {
  [123]=>
  int(1)
}

我想要

array(1) {
  ["123"]=>
  int(1)
}

答案 1

否;不,它不是:

手册中

键可以是整数或字符串。如果一个键是整数的标准表示形式,它将被解释为整数(即“8”将被解释为8,而“08”将被解释为“08”)。

补遗

由于下面的评论,我认为指出该行为与JavaScript对象键相似但不完全相同会很有趣。

foo = { '10' : 'bar' };

foo['10']; // "bar"
foo[10]; // "bar"
foo[012]; // "bar"
foo['012']; // undefined!

答案 2

是的,可以通过数组转换对象来实现:stdClass

$data =  new stdClass;
$data->{"12"} = 37;
$data = (array) $data;
var_dump( $data );

这给你(直到PHP版本7.1):

array(1) {
  ["12"]=>
  int(37)
}

(更新:我原来的答案显示使用更复杂的方式,这是不必要的。json_decode()json_encode()

请注意注释:很遗憾,无法直接引用值:将导致通知。$data['12']

更新
从 PHP 7.2 开始,也可以使用数字字符串作为键来引用值:

var_dump( $data['12'] ); // int 32

推荐