Então, qual é a diferença entre esses 2: array_merge , sinal de mais (embora eu tenha que alternar entre os arrays)?
Joseph Silber
15
Uma palavra de cautela para os iniciantes aqui, o resultado da operação em ambos os casos é nulo se qualquer um dos arrays for nulo . Alguns podem não se importar com isso, supondo que, por se tratar de uma operação de união, o resultado será o array adequado (não nulo) se um deles for nulo . Mas, isso é verdade se uma das matrizes for uma matriz vazia. Portanto, como uma boa prática, eu acho, devemos inicializar os arrays de entrada como arrays vazios. O que vocês dizem?
Sandeepan Nath
6
Se houver chaves duplicadas, "tirar o sindicato" sempre terá que se livrar de uma delas. A diferença está em qual.
alexis
5
Desculpe, esta resposta é confusa, errada e incompleta. : -o Veja o comentário de @alexis sobre a parte confusa (embora ele também seja apenas metade da verdade sobre o OP). 2. Veja a resposta de Yehosef sobre o que array_mergerealmente faz ... 3. E veja a resposta de BoltClock sobre outra diferença crucial não mencionada aqui: array_mergeredefine as teclas numéricas, ao contrário +.
Sz.
não é específico. não ajuda. não destaca a diferença. nível muito alto de uma explicação.
Observe que as chaves não numéricas duplicadas assumirão o primeiro valor usando o operador de união, mas o último usando o array_merge.
Para chaves numéricas, o primeiro valor será usado com o operador de união, enquanto todos os valores serão usados com array_merge, apenas reindexado.
Eu geralmente uso o operador de união para matrizes associativas e array_merge para numérico. Claro, você também pode usar array_merge para associativo, apenas para que os valores posteriores substituam os anteriores.
array_merge()faz com que todas as chaves numéricas encontradas nas matrizes de entrada sejam reindexadas na matriz resultante. O operador de união +não causa uma reindexação.
Interessante notar nisso é que o na array_mergeverdade apaga o índice '3' do número três, embora seja uma string, porque é um número.
Portanto, tome cuidado ao mesclar com array_mergematrizes com índices numéricos. Eles podem perder suas chaves. se forem importantes para você, coloque um barbante antes deles.
então, em vez de '3' => 'three'usar algo como'_3' => 'three'
Ainda outro exemplo (matrizes sem chaves explícitas; é óbvio em relação a como o operador +e array_mergefuncionam, mas as coisas "óbvias" são mais simples quando vistas;))
Preste atenção para outra diferença: a união (+) não substituirá o valor não vazio com o valor vazio (considerando a mesma chave), enquanto array_merge:
$a = array('foo'=>'bar');
$b = array('foo'=>'');// or false or 0
print_r($a+$b);
print_r(array_merge($a, $b);
Respostas:
A diferença é:
O
+
operador obtém a união das duas matrizes, enquanto aarray_merge
função obtém a união, MAS as chaves duplicadas são substituídas.fonte
array_merge
realmente faz ... 3. E veja a resposta de BoltClock sobre outra diferença crucial não mencionada aqui:array_merge
redefine as teclas numéricas, ao contrário+
.Aqui está um teste ilustrativo simples:
com o resultado:
Observe que as chaves não numéricas duplicadas assumirão o primeiro valor usando o operador de união, mas o último usando o array_merge.
Para chaves numéricas, o primeiro valor será usado com o operador de união, enquanto todos os valores serão usados com array_merge, apenas reindexado.
Eu geralmente uso o operador de união para matrizes associativas e array_merge para numérico. Claro, você também pode usar array_merge para associativo, apenas para que os valores posteriores substituam os anteriores.
fonte
array_merge()
faz com que todas as chaves numéricas encontradas nas matrizes de entrada sejam reindexadas na matriz resultante. O operador de união+
não causa uma reindexação.fonte
Fonte: https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/
Pare de usar array_merge ($ defaults, $ options):
Nota : a função array_replace existe desde PHP5.3.
fonte
O sinal + apenas obtém o valor da primeira ocorrência de uma chave de array.
array_merge obtém o valor da última ocorrência de uma chave de array.
Exemplo:
Isso resulta em:
Interessante notar nisso é que o na
array_merge
verdade apaga o índice '3' do número três, embora seja uma string, porque é um número.Portanto, tome cuidado ao mesclar com
array_merge
matrizes com índices numéricos. Eles podem perder suas chaves. se forem importantes para você, coloque um barbante antes deles.então, em vez de
'3' => 'three'
usar algo como'_3' => 'three'
fonte
Acredito que
array_merge
substitui chaves$array1 + $array2
não numéricas duplicadas, enquanto não.fonte
Ainda outro exemplo (matrizes sem chaves explícitas; é óbvio em relação a como o operador
+
earray_merge
funcionam, mas as coisas "óbvias" são mais simples quando vistas;))darei:
fonte
Preste atenção para outra diferença: a união (+) não substituirá o valor não vazio com o valor vazio (considerando a mesma chave), enquanto array_merge:
Saídas:
fonte
Então, aparentemente, se você alterar a ordem, a união e a fusão farão a mesma coisa
Saídas:
Lembre-se da ordem das matrizes.
fonte
$a+$b
vs$b+$a
. Nada é substituído.