You can refer php manual, but for now i will explain you the difference like this.
array_push()
treats array as a stack, and pushes
the passed variables onto the end of array . The
length of array increases by the number of
variables pushed. Has the same effect as:
Example
<?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()
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
<?php
$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
)
array_push — Push one or more elements onto the end of array
array_push() treats array as a stack, and pushes the passed variables onto the end of array. The length of array increases by the number of variables pushed.
array_merge — Merge one or more arrays
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.
<?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);
?>
As per performance array_merge is slow.There is a discussion you should read.