Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between array_push() and array_merge()? [closed]

Tags:

arrays

php

I am adding these two elements into a new array using these two functions array_push() and array_merge().

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

And with ..

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

all these are printing same..

Array
 (
    [0] => foo
 )

Now my question is what is the main difference between these two functions in functionality based. I am new in PHP.

like image 676
Chayan Biswas Avatar asked Dec 10 '22 17:12

Chayan Biswas


2 Answers

You can refer to the PHP manual, but for now I will explain the difference like this:

array_push()

Treats the array as a stack, and pushes the passed variables onto the end of the array. The length of the array increases by the number of variables pushed.

Example

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

Merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array. If the input arrays have the same string keys, then the later value for that key will overwrite the previous one.

If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended. Values in the input array with numeric keys will be renumbered with incrementing keys starting from zero in the result array.

Example

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

The above example will output:

Array
(
    [color] => blue
    [0] => 0
    [1] => 1
    [2] => a
    [3] => b
    [shape] => rectangle
    [4] => 1
)
like image 76
Prafulla Kumar Sahu Avatar answered Dec 15 '22 00:12

Prafulla Kumar Sahu


array_push() adds each argument to the array:

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

This will create a multidimensional array, which I don't think is what you want. Array merge just puts them together to make one big array, which I think is what you're after. To get the same effect with array_push(), you'd have to do this:

//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];
like image 43
Ramirez Avatar answered Dec 14 '22 23:12

Ramirez