Итак, в чем разница между этими 2: array_merge , знак плюс (хотя мне пришлось перейти вокруг массивов)?
Джозеф Зильбер,
15
Предупреждение для новичков: результат операции в обоих случаях равен нулю, если какой-либо из массивов равен нулю . Некоторые могут не заботиться об этом, предполагая, что, поскольку это операция объединения, результатом будет правильный (не нулевой) массив, если один из них имеет значение NULL . Но это верно, если один из массивов является пустым. Поэтому я считаю хорошей практикой инициализировать входные массивы как пустые. Что вы скажете, ребята?
Sandeepan Nath
6
Если есть повторяющиеся ключи, «взяв объединение» всегда придется избавляться от одного из них. Разница в том, в каком.
Alexis
5
Извините, этот ответ сбивает с толку, неверен и неполон. : -o См. комментарий @ alexis относительно запутанного бита (хотя это также лишь половина правды относительно OP). 2. См . Ответ Йехосефа о том, что на array_mergeсамом деле делает ... 3. И см . Ответ BoltClock о другом важном отличии, не упомянутом здесь: array_mergeсбрасывает цифровые клавиши, в отличие от +.
Sz.
совсем не конкретный. не полезно. не подчеркивает разницу. слишком высокий уровень объяснения.
Обратите внимание, что повторяющиеся нечисловые ключи будут принимать первое значение с помощью оператора объединения, а второе с использованием array_merge.
Для числовых ключей первое значение будет использоваться с оператором объединения, тогда как все значения будут использоваться с array_merge, только что переиндексированным.
Обычно я использую оператор объединения для ассоциативных массивов и array_merge для числовых. Конечно, вы можете также использовать array_merge для ассоциативности, просто чтобы более поздние значения перезаписывали более ранние.
array_merge()заставляет все числовые ключи, найденные во входных массивах, переиндексироваться в результирующем массиве. Оператор объединения +не вызывает переиндексацию.
Интересно отметить, что на array_mergeсамом деле стирает в «3» индекс номер три , даже если это строка, потому что это число.
Так что будьте осторожны при слиянии с array_merge массивами с числовыми индексами. Они могут потерять ключи. если они важны для вас, поставьте перед ними строку.
поэтому вместо '3' => 'three'использования чего-то вроде'_3' => 'three'
Обратите внимание на еще одно отличие: объединение (+) не будет перезаписывать непустое значение пустым значением (с учетом того же ключа), тогда как array_merge:
$a = array('foo'=>'bar');
$b = array('foo'=>'');// or false or 0
print_r($a+$b);
print_r(array_merge($a, $b);
Ответы:
Разница в следующем:
+
Оператор принимает объединение двух массивов, в то время какarray_merge
функция принимает объединение НО дублирующие ключи будут перезаписаны.источник
array_merge
самом деле делает ... 3. И см . Ответ BoltClock о другом важном отличии, не упомянутом здесь:array_merge
сбрасывает цифровые клавиши, в отличие от+
.Вот простой наглядный тест:
с результатом:
Обратите внимание, что повторяющиеся нечисловые ключи будут принимать первое значение с помощью оператора объединения, а второе с использованием array_merge.
Для числовых ключей первое значение будет использоваться с оператором объединения, тогда как все значения будут использоваться с array_merge, только что переиндексированным.
Обычно я использую оператор объединения для ассоциативных массивов и array_merge для числовых. Конечно, вы можете также использовать array_merge для ассоциативности, просто чтобы более поздние значения перезаписывали более ранние.
источник
array_merge()
заставляет все числовые ключи, найденные во входных массивах, переиндексироваться в результирующем массиве. Оператор объединения+
не вызывает переиндексацию.источник
Источник: https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/
Прекратите использовать array_merge ($ defaults, $ options):
Примечание : функция array_replace существует с PHP5.3.
источник
Знак + принимает только значение из первого появления ключа массива.
array_merge принимает значение из последнего вхождения ключа массива.
Пример:
Это выводит:
Интересно отметить, что на
array_merge
самом деле стирает в «3» индекс номер три , даже если это строка, потому что это число.Так что будьте осторожны при слиянии с
array_merge
массивами с числовыми индексами. Они могут потерять ключи. если они важны для вас, поставьте перед ними строку.поэтому вместо
'3' => 'three'
использования чего-то вроде'_3' => 'three'
источник
Я считаю, что
array_merge
перезаписывает повторяющиеся non_numeric ключи, а$array1 + $array2
этого нет.источник
Еще один пример (массивы без явных ключей; это очевидно относительно того, как работает оператор
+
иarray_merge
, но "очевидные" вещи проще на вид;))дам:
источник
Обратите внимание на еще одно отличие: объединение (+) не будет перезаписывать непустое значение пустым значением (с учетом того же ключа), тогда как array_merge:
Выходы:
источник
Очевидно, если вы измените порядок, объединение и слияние будут делать то же самое.
Выходы:
Помните о порядке массивов.
источник
$a+$b
против$b+$a
. Ничего не отменяется.