Php 不能';t在关联数组中使用整数作为键
我想在关联数组中使用整数作为键。我尝试使用settype()方法将其转换为字符串,然后将其与现有关联数组合并 代码如下: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_
$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))/*重新索引*/