PHP中作为数组键的数字字符串
是否可以使用像PHP中作为数组键的数字字符串,php,Php,是否可以使用像“123”这样的数字字符串作为PHP数组中的键,而不将其转换为整数 $blah = array('123' => 1); var_dump($blah); 印刷品 array(1) { [123]=> int(1) } 我想要 array(1) { ["123"]=> int(1) } 您可以将键类型转换为字符串,但由于PHP的松散键入,它最终将转换为整数。你自己看看: $x=array((string)123=>'abc'); var
“123”
这样的数字字符串作为PHP数组中的键,而不将其转换为整数
$blah = array('123' => 1);
var_dump($blah);
印刷品
array(1) {
[123]=>
int(1)
}
我想要
array(1) {
["123"]=>
int(1)
}
您可以将键类型转换为字符串,但由于PHP的松散键入,它最终将转换为整数。你自己看看:
$x=array((string)123=>'abc');
var_dump($x);
$x[123]='def';
var_dump($x);
从PHP手册:
键可以是整数或字符串。如果钥匙是标准的
表示一个整数,它将被解释为(即。
“8”将解释为8,“08”将解释为“08”)。
键中的浮点被截断为整数。索引和关联
数组类型在PHP中是相同的类型,两者都可以包含整数
和字符串索引
您可以将键类型转换为字符串,但由于PHP的松散键入,它最终将转换为整数。你自己看看:
$x=array((string)123=>'abc');
var_dump($x);
$x[123]='def';
var_dump($x);
从PHP手册:
键可以是整数或字符串。如果钥匙是标准的
表示一个整数,它将被解释为(即。
“8”将解释为8,“08”将解释为“08”)。
键中的浮点被截断为整数。索引和关联
数组类型在PHP中是相同的类型,两者都可以包含整数
和字符串索引
没有;不,不是:
发件人:
键可以是整数或字符串。如果一个键是一个整数的标准表示形式,它将被解释为这样(即,“8”将被解释为8,而“08”将被解释为“08”)
附录
由于下面的评论,我认为指出这种行为与JavaScript对象键类似但不完全相同会很有趣
foo = { '10' : 'bar' };
foo['10']; // "bar"
foo[10]; // "bar"
foo[012]; // "bar"
foo['012']; // undefined!
没有;不,不是:
发件人:
键可以是整数或字符串。如果一个键是一个整数的标准表示形式,它将被解释为这样(即,“8”将被解释为8,而“08”将被解释为“08”)
附录
由于下面的评论,我认为指出这种行为与JavaScript对象键类似但不完全相同会很有趣
foo = { '10' : 'bar' };
foo['10']; // "bar"
foo[10]; // "bar"
foo[012]; // "bar"
foo['012']; // undefined!
如果您需要在php数据结构中使用数字键,那么对象将起作用。对象保持顺序,因此可以进行迭代
$obj = new stdClass();
$key = '3';
$obj->$key = 'abc';
如果您需要在php数据结构中使用数字键,那么对象将起作用。对象保持顺序,因此可以进行迭代
$obj = new stdClass();
$key = '3';
$obj->$key = 'abc';
我在同时使用“0”和“”作为键的数组上遇到此问题。这意味着我不能用==或==检查数组键
$array=array(''=>'empty', '0'=>'zero', '1'=>'one');
echo "Test 1\n";
foreach ($array as $key=>$value) {
if ($key == '') { // Error - wrongly finds '0' as well
echo "$value\n";
}
}
echo "Test 2\n";
foreach ($array as $key=>$value) {
if ($key === '0') { // Error - doesn't find '0'
echo "$value\n";
}
}
解决方法是在使用前将数组键强制转换回字符串
echo "Test 3\n";
foreach ($array as $key=>$value) {
if ((string)$key == '') { // Cast back to string - fixes problem
echo "$value\n";
}
}
echo "Test 4\n";
foreach ($array as $key=>$value) {
if ((string)$key === '0') { // Cast back to string - fixes problem
echo "$value\n";
}
}
我在同时使用“0”和“”作为键的数组上遇到此问题。这意味着我不能用==或==检查数组键
$array=array(''=>'empty', '0'=>'zero', '1'=>'one');
echo "Test 1\n";
foreach ($array as $key=>$value) {
if ($key == '') { // Error - wrongly finds '0' as well
echo "$value\n";
}
}
echo "Test 2\n";
foreach ($array as $key=>$value) {
if ($key === '0') { // Error - doesn't find '0'
echo "$value\n";
}
}
解决方法是在使用前将数组键强制转换回字符串
echo "Test 3\n";
foreach ($array as $key=>$value) {
if ((string)$key == '') { // Cast back to string - fixes problem
echo "$value\n";
}
}
echo "Test 4\n";
foreach ($array as $key=>$value) {
if ((string)$key === '0') { // Cast back to string - fixes problem
echo "$value\n";
}
}
我的解决办法是:
$id = 55;
$array = array(
" $id" => $value
);
空格字符(prepend)是一个很好的解决方案,因为保持int转换:
foreach( $array as $key => $value ) {
echo $key;
}
您将看到55为int。我的解决方法是:
$id = 55;
$array = array(
" $id" => $value
);
空格字符(prepend)是一个很好的解决方案,因为保持int转换:
foreach( $array as $key => $value ) {
echo $key;
}
您将看到55为int。我在合并同时具有字符串键和整数键的数组时遇到问题。整数也应作为字符串处理,这一点很重要,因为它们是输入字段的名称(如鞋码等) 当我使用
$data=array\u merge($data,$extra)时代码>PHP将“重新排序”键。在尝试进行排序时,整数键(我尝试使用6
-'6'
-“6”
甚至(string)“6”
作为键)从0重命名为n
。。。如果你仔细想想,在大多数情况下,这是你想要的行为
您可以使用$data=$data+$extra代码>取而代之。
非常直截了当,但一开始我没有想到^。我在尝试合并同时具有字符串键和整数键的数组时遇到了这个问题。整数也应作为字符串处理,这一点很重要,因为它们是输入字段的名称(如鞋码等)
当我使用$data=array\u merge($data,$extra)时代码>PHP将“重新排序”键。在尝试进行排序时,整数键(我尝试使用6
-'6'
-“6”
甚至(string)“6”
作为键)从0重命名为n
。。。如果你仔细想想,在大多数情况下,这是你想要的行为
您可以使用$data=$data+$extra代码>取而代之。
非常直截了当,但一开始我没有想到^。我在尝试对数组排序时遇到了这个问题,我需要排序键为十六进制sha1。当得到的sha1值没有字母时,PHP将键转换为整数。但是我需要根据字符串的相对顺序对数组进行排序。因此,我需要找到一种方法,在不改变排序顺序的情况下强制键为字符串
看看ASCII图表(),感叹号排序与空格差不多,当然比所有数字和字母都低
因此,我在键字符串的末尾附加了一个感叹号
for(...) {
$database[$sha.'!'] = array($sha,$name,$age);
}
ksort($database);
$row = reset($database);
$topsha = $row[0];
我在尝试对数组排序时遇到了这个问题,我需要排序键为十六进制sha1。当得到的sha1值没有字母时,PHP将键转换为整数。但是我需要根据字符串的相对顺序对数组进行排序。因此,我需要找到一种方法,在不改变排序顺序的情况下强制键为字符串
看看ASCII图表(),感叹号排序与空格差不多,当然比所有数字和字母都低
因此,我在键字符串的末尾附加了一个感叹号
for(...) {
$database[$sha.'!'] = array($sha,$name,$age);
}
ksort($database);
$row = reset($database);
$topsha = $row[0];
是的,可以通过数组强制转换stdClass
对象:
$data = new stdClass;
$data->{"12"} = 37;
$data = (array) $data;
var_dump( $data );
这将为您提供(PHP 7.1版之前的版本):
(更新:我最初的答案显示了一种更复杂的方式,使用json\u decode()
a