Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 不能';t在关联数组中使用整数作为键_Php_String_Integer_Associative Array - Fatal编程技术网

Php 不能';t在关联数组中使用整数作为键

Php 不能';t在关联数组中使用整数作为键,php,string,integer,associative-array,Php,String,Integer,Associative Array,我想在关联数组中使用整数作为键。我尝试使用settype()方法将其转换为字符串,然后将其与现有关联数组合并 代码如下: $Xcenter = 325; $Ycenter = 59.8; $Xcenter = strval($XCenter); $existing_array = array('a'=>'b', 'b'=>'c'); $new_array = array($XCenter=>$YCenter); $result = array_merge($existing_

我想在关联数组中使用整数作为键。我尝试使用settype()方法将其转换为字符串,然后将其与现有关联数组合并

代码如下:

$Xcenter = 325;
$Ycenter = 59.8;

$Xcenter = strval($XCenter);
$existing_array = array('a'=>'b', 'b'=>'c');
$new_array = array($XCenter=>$YCenter);
$result = array_merge($existing_array, $new_array);
print_r($result);
电流输出:

Array ( [a] => b [b] => c [0] => 59.8 ) 
预期产出:

Array ( [a] => b [b] => c [325] => 59.8 ) 
由于某些原因,它没有将整数转换为字符串。但这对于如下所示的浮点值非常有效:

Array ( [a] => b [b] => c [148.33333333333] => 59.8 )
从手册中:

如果输入数组具有相同的字符串键,则后面的值 因为该键将覆盖上一个键。但是,如果 如果包含数字键,则后面的值不会覆盖原始值 值,但将被追加

带有数字键的输入数组中的值将用 在结果数组中从零开始递增键

如果您只想将一个键设置为一个特定的值,您不需要合并,您可以像
$array[123]=$foo
那样设置它。或者与
$array1+$array2
进行联合。但仅供参考,union不会重新索引数字键,也不会覆盖以前的值。因此,通常必须反转通常传递给array\u merge的参数。因此
array\u merge($a1,$a2)
$a2+$a1
基本相同,无需重新索引数字键。

手册中的:

如果输入数组具有相同的字符串键,则后面的值 因为该键将覆盖上一个键。但是,如果 如果包含数字键,则后面的值不会覆盖原始值 值,但将被追加

带有数字键的输入数组中的值将用 在结果数组中从零开始递增键


如果您只想将一个键设置为一个特定的值,您不需要合并,您可以像
$array[123]=$foo
那样设置它。或者与
$array1+$array2
进行联合。但仅供参考,union不会重新索引数字键,也不会覆盖以前的值。因此,通常必须反转通常传递给array\u merge的参数。因此,
array\u merge($a1,$a2)
$a2+$a1
基本相同,没有重新索引的数字键。

从哪里来:
$YCenter
?也只需删除您的settype调用!使用
$Xcenter=“325”
而不是
settype()
怎么样?只使用
$existing_array[$Xcenter]=“something”怎么样
array\u merge
将重新为数字键编制索引,这就是为什么会得到0。根据,
不要忘记数字键将重新编号。如果将
325
强制为字符串,则它仍将通过is_numeric()传递,并最终被视为一个数字。请尝试
$result=$old_array+$new_array
。@Rizier123您的问题对我来说没什么意义,因为YCenter是一个值,它与键的索引方式无关。我用strvalFrom替换了settype():
$YCenter
来自哪里?也只需删除您的settype调用!使用
$Xcenter=“325”
而不是
settype()
怎么样?只使用
$existing_array[$Xcenter]=“something”怎么样
array\u merge
将重新为数字键编制索引,这就是为什么会得到0。根据,
不要忘记数字键将重新编号。如果将
325
强制为字符串,则它仍将通过is_numeric()传递,并最终被视为一个数字。请尝试
$result=$old_array+$new_array
。@Rizier123您的问题对我来说没什么意义,因为YCenter是一个值,它与键的索引方式无关。我已经用strvalIs替换了settype(),上面的语句为true,即使我在将整数存储到关联数组之前将其转换为字符串?当然,我会将array_merge语句更改为您提到的语句。如果您看到的结果是肯定的,则带整数值的字符串将重新编号。手动状态
数字键将重新编号
。它可能只是内部调用
is\u numeric($key)
,如果这是真的,则将其转换为数字。假设有一个额外的检查,即转换为整数不会像浮点那样截断值
if(is_numeric($key)&&((int)$key==$key))/*re index*/
即使在将整数存储到关联数组之前将其转换为字符串,上述语句是否为真?当然,我会将array_merge语句更改为您提到的语句。如果您看到的结果是肯定的,则带整数值的字符串将重新编号。手动状态
数字键将重新编号
。它可能只是内部调用
is\u numeric($key)
,如果这是真的,则将其转换为数字。假设存在一个额外的检查,即转换为整数不会像浮点那样截断值,如果(是数值($key)和(&((int)$key==$key))/*重新索引*/