array_push()和array_merge()有什么区别?

时间:2016-03-11 09:04:43

标签: php arrays

我使用这两个函数array_push()array_merge()将这两个元素添加到一个新数组中。

    $a1 = array();
    $a2 = 'foo';
    echo '<pre>';
    print_r( array_merge($a1, (array)$a2) );
    echo '</pre>';

并且.. ..

    $a1 = array();
    $a2 = 'foo';
    array_push($a1, $a2);
    echo '<pre>';
    print_r($a1);
    echo '</pre>';

所有这些都是相同的..

Array
 (
    [0] => foo
 )

现在我的问题是基于功能的这两个功能之间的主要区别是什么。我是php的新手,所以请帮助我。

4 个答案:

答案 0 :(得分:4)

或者你可以参考php手册,但是现在我会解释你这样的差异。

array_push()  将数组视为堆栈,然后推送 传递的变量到数组的末尾。该 数组的长度增加了 推动变量。具有与以下相同的效果:

实施例

<?php
$stack = array( "orange" , "banana" );
array_push
($stack , "1" , "2");
print_r ($stack );
?>
The above example will output:
Array
(
    [0] => orange
    [1] => banana
    [2] => 1
    [3] => 2
)

Array_merge() 将一个或多个数组的元素合并在一起 以便将一个值附加到末尾 前一个。它返回结果数组。 如果输入数组具有相同的字符串键,那么 该键的后一个值将覆盖该键 前一个。但是,如果数组包含数字 键,后面的值不会覆盖原始值 值,但将被追加。 使用数字键的输入数组中的值将是 用从零开始的递增键重新编号 在结果数组中。 实施例

<?php
$array1 = array
("color" => "yellow" , 0, 1);
$array2 = array
("a" , "b" , "color" => "blue" , "shape
" =>"rectangle" , 1);
$result = array_merge
($array1 , $array2 );
print_r ($result );
?>

以上示例将输出:

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

array_push - 将一个或多个元素推送到数组的末尾

array_push()将数组视为堆栈,并将传递的变量推送到数组的末尾。数组的长度增加了推送的变量数。

array_merge - 合并一个或多个数组

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

    <?php
    $a1 = array('foo', 'bar');
    $a2 = 'foo';
    echo '<br />';
    print_r( array_merge($a1, (array)$a2) );
    $a1 = array('foo', 'bar');
    $a2 = 'foo';
    echo '<br />';
    array_push($a1, $a2);
    print_r($a1);
    ?>

根据性能,array_merge很慢。你应该阅读discussion

答案 1 :(得分:2)

<强> array_push(&$arr, $mixed [, $mixed]):int (number of elements)

将一个或多个元素推送到数组上,就好像它是一个堆栈一样。

如此。

$arr = ['1','2','3'];
array_push($arr, '4');

变为

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

<强> array_merge($arr1, $arr2 [, array $... ] ):array

$arr1 = ['1','2','3'];
$arr2 = ['4','5','6'];

$arr3 = array_merge($arr1, $arr2);

注意第3个阵列。

变为

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

这两个函数都可以使用多个参数。

答案 2 :(得分:2)

array_push - 将一个或多个元素推送到数组的末尾它不会使用两个不同的数组只是我们有一个数组而在array_merge中我们有两个不同的数组我们将它们合并为一个数组

<?php
$stack = array("foo", "bar");
array_push($stack, "bar2", "foo2");
print_r($stack);
?>

outpur

Array
(
    [0] => foo
    [1] => bar
    [2] => bar2
    [3] => foo2
)

而array_marge组合了两个不同的数组

$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
)

答案 3 :(得分:2)

array_push()将每个参数添加到数组中:

array_push($array1, $array2);  
//is the same as  
$array1[] = $array2;

这将创建一个多维数组,我认为这不是你想要的。数组合并只是将它们组合在一起构成一个大数组,我认为这就是你所追求的。要使用array_push()获得相同的效果,您必须这样做:

//assuming $array2 has 4 elements 
array_push($array1, $array2[0], $array2[1], $array2[2], $array2[3]); 
//is the same as 
$array1 = array_merge($array1, $array2); 
//is the same as 
$array1[] = $array2[0]; 
$array1[] = $array2[1]; 
$array1[] = $array2[2]; 
$array1[] = $array2[3];