PHP array_merge()函数

时间:2013-12-30 10:45:26

标签: php arrays

在使用arrays处理array_merge function期间,我遇到了一些问题。这是一个例子:

第一个例子:

 $first = array('01' => 1, '03' => 73);
 $second = array('14'=>11, '15' => 23);
 var_dump(array_merge($first, $second));

结果是:

array(4) { ["01"]=> int(1) ["03"]=> int(73) [0]=> int(11) [1]=> int(23) } 

预期:

array(4) { ["01"]=> int(1) ["03"]=> int(73) [14]=> int(11) [15]=> int(23) } 

第二个例子:

 $first = array('01'=>3, '03'=>10);
 $second = array('05'=>44, '07'=>3);
 var_dump(array_merge($first,$second));

结果是(正如预期的那样):

array(4) { ["01"]=> int(3) ["03"]=> int(10) ["05"]=> int(44) ["07"]=> int(3) }

第三个例子:

var_dump(array_merge(array("somekey"=> array("some value"))));

结果是(正如预期的那样):

array(1) { ["somekey"]=> array(1) { [0]=> string(10) "some value" } } 

第四个例子:

var_dump(array_merge(array("34"=> array("some value"))));

结果是:

array(1) { [0]=> array(1) { [0]=> string(10) "some value" } } 

预期:

array(1) { [0]=> array(1) { ["34"]=> string(10) "some value" } } 

var_dump(array_merge(array("34"=> array("some value"))));

thirdfourth示例中我可以看到,我为键设置了字符串,但结果并不像预期的那样。

理解错误或不正确? 谢谢你的帮助。

已编辑。为什么(例如第一个和第二个)结果不同,但键是字符串,只包含摘要?

3 个答案:

答案 0 :(得分:2)

从手册中引用:

  

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

     

带有数字键的输入数组中的值将重新编号   在结果数组中从零开始递增键。

具有前导零的键被视为字符串,而没有前导零的数字键被视为数字

如果您想完全按原样保留密钥:

$first = array('01' => 1, '03' => 73);
$second = array('14'=>11, '15' => 23);
var_dump(
    array_combine(
        array_merge(
            array_keys($first), array_keys($second)
        ),
        array_merge(
            $first, $second
        )
    )
);

只要密钥在$ first和$ second

之间是唯一的

答案 1 :(得分:0)

定义:将一个或多个数组的元素合并在一起,以便将一个值的值附加到前一个数组的末尾。它返回结果数组。

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

带有数字键的输入数组中的值将使用从结果数组中的零开始的递增键重新编号。

INPUT

 <?php
    $array1 = array("color" => "red", 2, 4);
    $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
    $result = array_merge($array1, $array2);
    print_r($result);
    ?>

输出

Array
(
[color] => green
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => trapezoid
[4] => 4
)

希望有所帮助:)

答案 2 :(得分:-3)

尝试 array_merge(),如下所示: -

$first = array('01' => 1, '03' => 73);
$second = array('14'=>11, '15' => 23);
$output = array_merge($first, $second);
print_r($output);

修改: -

$first = array('01' => 1, '03' => 73);
$second = array('14'=>11, '15' => 23);
$output = $first + $second;
print_r($output);