为什么PHP在array_merge()
离。
$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()
函数: -
如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键。但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会附加。
答案 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"
仍为字符串密钥