В чем разница между array_push() и array_merge()?
Я добавляю эти два элемента в новый массив, используя эти две функции 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 ответа
Или вы можете обратиться к руководству по 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 медленный. Есть обсуждение, которое вы должны прочитать.
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];
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
)
array_push(&$arr, $mixed [, $mixed]):int (количество элементов)
помещает один или несколько элементов в массив, как если бы это был стек.
так.
$arr = ['1','2','3'];
array_push($arr, '4');
становится
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
array_merge($arr1, $arr2 [, 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
)
Обе функции могут принимать несколько параметров.