Alors, quelle est la différence entre ces 2: array_merge , signe plus (même si j'ai dû basculer entre les tableaux)?
Joseph Silber
15
Un mot d'avertissement pour les débutants ici, le résultat de l'opération dans les deux cas est nul si l'un des tableaux est nul . Certains pourraient ne pas se soucier de cela en supposant qu'il s'agit d'une opération d'union, le résultat sera le tableau approprié (non nul) si l'un d'entre eux est nul . Mais cela est vrai si l'un des tableaux est un tableau vide. Donc, comme bonne pratique, je pense, nous devrions initialiser les tableaux d'entrée en tant que tableaux vides. Que dites-vous les gars?
Sandeepan Nath
6
Si des clés en double «en prenant l'union » toujours avoir à se débarrasser de l' un d'entre eux. La différence est dans laquelle.
alexis
5
Désolé, cette réponse est confuse, fausse et incomplète. : -o Voir le commentaire de @ alexis concernant le peu de confusion (bien que le sien ne soit que la moitié de la vérité concernant l'OP). 2. Voir la réponse de Yehosef sur ce que array_mergefait réellement ... 3. Et voir la réponse de BoltClock sur une autre différence cruciale non mentionnée ici: array_mergeréinitialise les touches numériques, contrairement +.
Sz.
pas du tout spécifique. inutile. ne met pas en évidence la différence. trop haut niveau d’explication.
Notez que les clés non numériques en double prendront la première valeur en utilisant l'opérateur union, mais la dernière en utilisant array_merge.
Pour les clés numériques, la première valeur sera utilisée avec l'opérateur union alors que toutes les valeurs seront utilisées avec le array_merge, juste réindexé.
J'utilise généralement l'opérateur union pour les tableaux associatifs et array_merge pour les nombres. Bien sûr, vous pouvez tout aussi bien utiliser array_merge pour associatif, simplement que les dernières valeurs écrasent les précédentes.
array_merge()provoque la réindexation de toutes les clés numériques trouvées dans les tableaux d'entrée dans le tableau résultant. L'opérateur union +ne provoque pas de réindexation.
pourquoi devrions-nous arrêter d'utiliser array_merge ($ default, $ options) :? parce qu'il interdit les clés non indexées?
ahnbizcad
mais la réponse est vraiment didactique +1
snr
20
Le signe + prend uniquement la valeur de la première occurrence d'une clé de tableau.
array_merge prend la valeur de la dernière occurrence d'une clé de tableau.
Il est intéressant de noter dans ce que l' array_mergeactally efface l'indice « 3 » du numéro trois , même si elle est une chaîne, car il est un certain nombre.
Faites donc attention lors de la fusion avec des array_mergetableaux avec des index numériques. Ils pourraient perdre leurs clés. s'ils sont importants pour vous, faites-les précéder d'une chaîne.
donc au lieu d' '3' => 'three'utiliser quelque chose comme'_3' => 'three'
Encore un autre exemple (tableaux sans clés explicites; c'est évident en ce qui concerne la façon dont l'opérateur +et le array_mergetravail, mais les choses "évidentes" sont plus simples quand on les voit;))
Veuillez faire attention à une autre différence: l'union (+) n'écrasera pas la valeur non vide par une valeur vide (en considérant une même clé), alors que array_merge:
$a = array('foo'=>'bar');
$b = array('foo'=>'');// or false or 0
print_r($a+$b);
print_r(array_merge($a, $b);
Réponses:
La différence est:
L'
+
opérateur prend l'union des deux tableaux, alors que laarray_merge
fonction prend l'union MAIS les clés dupliquées sont écrasées.la source
array_merge
fait réellement ... 3. Et voir la réponse de BoltClock sur une autre différence cruciale non mentionnée ici:array_merge
réinitialise les touches numériques, contrairement+
.Voici un test illustratif simple:
Avec le résultat:
Notez que les clés non numériques en double prendront la première valeur en utilisant l'opérateur union, mais la dernière en utilisant array_merge.
Pour les clés numériques, la première valeur sera utilisée avec l'opérateur union alors que toutes les valeurs seront utilisées avec le array_merge, juste réindexé.
J'utilise généralement l'opérateur union pour les tableaux associatifs et array_merge pour les nombres. Bien sûr, vous pouvez tout aussi bien utiliser array_merge pour associatif, simplement que les dernières valeurs écrasent les précédentes.
la source
array_merge()
provoque la réindexation de toutes les clés numériques trouvées dans les tableaux d'entrée dans le tableau résultant. L'opérateur union+
ne provoque pas de réindexation.la source
Source: https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/
Arrêtez d'utiliser array_merge ($ defaults, $ options):
Remarque : la fonction array_replace existe depuis PHP5.3.
la source
Le signe + prend uniquement la valeur de la première occurrence d'une clé de tableau.
array_merge prend la valeur de la dernière occurrence d'une clé de tableau.
Exemple:
Cela produit:
Il est intéressant de noter dans ce que l'
array_merge
actally efface l'indice « 3 » du numéro trois , même si elle est une chaîne, car il est un certain nombre.Faites donc attention lors de la fusion avec des
array_merge
tableaux avec des index numériques. Ils pourraient perdre leurs clés. s'ils sont importants pour vous, faites-les précéder d'une chaîne.donc au lieu d'
'3' => 'three'
utiliser quelque chose comme'_3' => 'three'
la source
Je crois qu'il
array_merge
écrase les clés non numériques en double alors que ce$array1 + $array2
n'est pas le cas.la source
Encore un autre exemple (tableaux sans clés explicites; c'est évident en ce qui concerne la façon dont l'opérateur
+
et learray_merge
travail, mais les choses "évidentes" sont plus simples quand on les voit;))va donner:
la source
Veuillez faire attention à une autre différence: l'union (+) n'écrasera pas la valeur non vide par une valeur vide (en considérant une même clé), alors que array_merge:
Les sorties :
la source
Donc, apparemment, si vous changez l'ordre, l'union et la fusion feront la même chose
Les sorties :
Gardez à l'esprit l'ordre des tableaux.
la source
$a+$b
vs$b+$a
. Rien n'est annulé.