是否可以"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)
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)
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.
您可以将键转换为字符串,但由于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中是相同的类型,它们都可以包含整数和字符串索引.