为什么PHP治疗" 1"作为array_merge()中的整数

时间:2014-07-28 09:46:04

标签: php arrays array-merge

为什么PHP在array_merge()

中将“1”视为整数

离。

$arr1 = array( "1"=>1, 2 , 3 );
$arr2 = array( "1"=>1, 2 );
print_r(array_merge( $arr1 , $arr2 ));
var_dump("1");
var_dump(1);

输出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 1
    [4] => 2
)

string(1) "1" int(1) 

根据array_merge()函数: - 如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键。但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会附加。

2 个答案:

答案 0 :(得分:4)

这与array_merge()无关,而是与PHP如何处理数组键有关。有关密钥的隐式转换,请参阅http://php.net/manual/en/language.types.array.php

答案 1 :(得分:0)

您根本不应该使用数值作为字符串键,因为它们被视为数字键。

在这种情况下最重要的是:

  

包含有效整数的字符串将强制转换为整数类型。   例如。关键" 8"实际上将存储在8下。另一方面   " 08"不会被强制转换,因为它不是有效的十进制整数。

以上内容与PHP Arrays manual

中的PHP数组有关

您可以使用以下示例代码查看它:

$arr1 = array( "1"=>1, "01" => 4,  2 , 3 );

var_dump($arr1);

它将返回:

  

array(4){1 => int(1)[" 01"] => int(4)[2] => int(2)[3] => int(3)}

因此,您的密钥"1"成为数字密钥,但密钥"01"仍为字符串密钥