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

Dog*_*ert 96 php

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

$blah = array('123' => 1);
var_dump($blah);
Run Code Online (Sandbox Code Playgroud)

版画

array(1) {
  [123]=>
  int(1)
}
Run Code Online (Sandbox Code Playgroud)

我想要

array(1) {
  ["123"]=>
  int(1)
}
Run Code Online (Sandbox Code Playgroud)

Ham*_*ish 82

没有; 不,这不对:

手册:

键可以是整数或字符串.如果一个键是整数的标准表示,它将被解释为这样(即"8"将被解释为8,而"08"将被解释为"08").

附录

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

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

foo['10']; // "bar"
foo[10]; // "bar"
foo[012]; // "bar"
foo['012']; // undefined!
Run Code Online (Sandbox Code Playgroud)

  • PHP,服务器端IE. (93认同)
  • 实际上看起来有一种方法!你不同意这个答案吗?http://stackoverflow.com/a/35180513/247696 (5认同)
  • @Himanshu:因为php将以0开头的数字解释为八进制。所以 012 是八进制的 10。 (3认同)

Dav*_*vid 40

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

$data =  new stdClass;
$data->{"12"} = 37;
$data = (array) $data;
var_dump( $data );
Run Code Online (Sandbox Code Playgroud)

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

array(1) {
  ["12"]=>
  int(37)
}
Run Code Online (Sandbox Code Playgroud)

(更新:我的原始答案显示使用更复杂的方式,json_decode()而且json_encode()没有必要.)

请注意评论:遗憾的是,无法直接引用该值:$data['12']将导致通知.

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

var_dump( $data['12'] ); // int 32
Run Code Online (Sandbox Code Playgroud)

  • 但是,使用字符串键直接访问值不起作用.将此行添加到您的示例中:`echo $ data ['12'];`.它会给出错误,"注意:未定义的偏移量:12英寸 - 第5行". (2认同)
  • 在PHP 7.2.0RC2中,行为与以前相同。 (2认同)
  • 显然 `array_key_exists` 在旧版本中也找不到它。 (2认同)

ste*_*red 11

如果需要在php数据结构中使用数字键,则对象将起作用.对象保留顺序,因此您可以迭代.

$obj = new stdClass();
$key = '3';
$obj->$key = 'abc';
Run Code Online (Sandbox Code Playgroud)


Und*_*log 10

我的解决方法是:

$id = 55;
$array = array(
  " $id" => $value
);
Run Code Online (Sandbox Code Playgroud)

space char(prepend)是一个很好的解决方案,因为保持int转换:

foreach( $array as $key => $value ) {
  echo $key;
}
Run Code Online (Sandbox Code Playgroud)

你会看到55为int.

  • 或者`"0 $ id"=> $ value`.前面加上"0"也有效. (4认同)

bco*_*sca 5

您可以将键转换为字符串,但由于PHP的松散类型,它最终会转换为整数.你自己看:

$x=array((string)123=>'abc');
var_dump($x);
$x[123]='def';
var_dump($x);
Run Code Online (Sandbox Code Playgroud)

从PHP手册:

键可以是整数或字符串.如果一个键是整数的标准表示,它将被解释为这样(即"8"将被解释为8,而"08"将被解释为"08").键中的浮点数被截断为整数.索引和关联数组类型在PHP中是相同的类型,它们都可以包含整数和字符串索引.