Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中作为数组键的数字字符串_Php - Fatal编程技术网

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