Отличие между array_merge() и +

Сегодня работал над одним из своих плагинов и в процессе у меня был выбор, что же в итоге использовать для объединения двух массивов – функцию array_merge() или оператор +. В итоге остановился на операторе, но зато решил написать этот пост, чтобы объяснить вам разницу.

Например давайте взглянем на простенький пример кода объединения двух массивов ниже:

array_merge( $first, $second );
 
// или
 
$first + $second;

И давайте предположим, что наши массивы по факту выглядят вот так:

$first = array(
    'a',
    'b',
);
 
$second = array(
    'c',
);

Теперь посмотрите, какой результат мы получим объединяя эти массивы функцией array_merge():

$new_array = array_merge( $first, $second );
print_r( $new_array );
/*
Array
(
    [0] => a
    [1] => b
    [2] => c
)
*/

А это при их объединении оператором +:

$new_array = $first + $second;
print_r( $new_array );
/*
Array
(
    [0] => a
    [1] => b
)
*/

Самое интересное, что при перемещении мест слагаемых сумма меняется:

$new_array = $second + $first;
print_r( $new_array );
/*
Array
(
    [0] => c
    [1] => b
)
*/

Почему же так?

Думаю ситуация может немного проясниться, если мы при записи этих двух массивов укажем также и их индексы.

$first = array(
    0 => 'a',
    1 => 'b',
);
 
$second = array(
    0 => 'c',
);

Итак, внимание.

+array_merge()
Добавляет в первый массив те элементы второго массива, индексы которых не существуют в первом.Добавляет в первый массив элементы второго массива и перезаписывает в первом массиве элементы с теми же самыми индексами. Однако в случае с нумерованными массивами добавляет все значения второго массива и сбрасывает индексы.

Наверное тут не помешает дополнительно уточнить действие array_merge() на ассоциативные и нумерованные массива.

$fruit1 = array(
	'yellow' => 'banana',
	'green' => 'apple',
);
 
$fruit2 = array(
	'green' => 'avocado',
);
 
$fruit = array_merge( $fruit1, $fruit2 );
/*
Array
(
    [yellow] => banana
    [green] => avocado
)
*/
 
 
$fruit1 = array( 'banana', 'apple' );
 
$fruit2 = array( 'avocado' );
 
$fruit = array_merge( $fruit1, $fruit2 );
/*
Array
(
    [0] => banana
    [1] => apple
    [2] => avocado
)
*/

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал