【问题标题】:What is the difference between array_push() and array_merge()? [closed]array_push() 和 array_merge() 有什么区别? [关闭]
【发布时间】:2016-06-26 10:46:43
【问题描述】:

我正在使用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 新手。

【问题讨论】:

  • 一个合并 2 个数组以创建第三个数组 - array_merge,一个将新项目添加到现有数组 array_push
  • 查看相应函数的 PHP 文档很容易回答这个问题。

标签: php arrays


【解决方案1】:

您可以参考 PHP 手册,但现在我将解释如下区别:

array_push()

将数组视为堆栈,并将传递的变量压入数组的末尾。数组的长度会随着推送的变量数量而增加。

示例

$stack = array("orange" , "banana");
array_push($stack, "1", "2");
print_r($stack);

上面的例子会输出:

Array
(
    [0] => orange
    [1] => banana
    [2] => 1
    [3] => 2
)

array_merge()

将一个或多个数组的元素合并在一起,以便将一个数组的值附加到前一个数组的末尾。它返回结果数组。如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个。

但是,如果数组包含数字键,则后面的值不会覆盖原始值,而是会被追加。输入数组中带有数字键的值将在结果数组中使用从零开始的递增键重新编号。

示例

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

【讨论】:

    【解决方案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];
    

    【讨论】:

      【解决方案3】:

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

      注意第三个数组。

      变成

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

      这两个函数都可以接受多个参数。

      【讨论】:

        【解决方案4】:

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

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

        输出将是

        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
        )
        

        【讨论】:

          猜你喜欢
          • 2011-07-20
          • 1970-01-01
          • 2010-12-10
          • 2011-09-20
          • 2013-03-25
          • 2023-03-08
          • 2016-07-17
          • 2015-07-17
          • 2014-07-11
          相关资源
          最近更新 更多