Сегодня работал над одним из своих плагинов и в процессе у меня был выбор, что же в итоге использовать для объединения двух массивов – функцию 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 ) */
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.