Citant le manuel PHP sur les opérateurs de langage
L'opérateur + renvoie le tableau de droite ajouté au tableau de gauche; pour les clés qui existent dans les deux tableaux, les éléments du tableau de gauche seront utilisés et les éléments correspondants du tableau de droite seront ignorés.
Alors si tu fais
$array1 = ['one', 'two', 'foo' => 'bar'];
$array2 = ['three', 'four', 'five', 'foo' => 'baz'];
print_r($array1 + $array2);
Tu auras
Array
(
[0] => one // preserved from $array1 (left-hand array)
[1] => two // preserved from $array1 (left-hand array)
[foo] => bar // preserved from $array1 (left-hand array)
[2] => five // added from $array2 (right-hand array)
)
La logique de +
équivaut donc à l'extrait de code suivant:
$union = $array1;
foreach ($array2 as $key => $value) {
if (false === array_key_exists($key, $union)) {
$union[$key] = $value;
}
}
Si vous êtes intéressé par les détails de la mise en œuvre au niveau C, dirigez-vous vers
Notez que cela +
est différent de la façon dont array_merge()
combinerait les tableaux:
print_r(array_merge($array1, $array2));
te donnerais
Array
(
[0] => one // preserved from $array1
[1] => two // preserved from $array1
[foo] => baz // overwritten from $array2
[2] => three // appended from $array2
[3] => four // appended from $array2
[4] => five // appended from $array2
)
Voir les pages liées pour plus d'exemples.
+=
et la réponse acceptée avait+
. D'après mes tests, ils semblent se comporter de la même manière.