Il y a 3 opérations avec des ensembles en mathématiques: intersection, différence et union (unification). Dans PHP nous pouvons faire ces opérations avec des tableaux:
array_intersect
array_diff
Quelle fonction est pour l'union?
Aucun doublon ne peut se trouver dans le tableau de résultats (comme array_intersect
et array_diff
).
Si les index sont numériques, alors array_merge
n'écrasera pas la valeur d'origine, mais sera ajouté ( documentation PHP ).
array_unique( array_merge( ... ) )
La réponse d'Adrien ne produira pas nécessairement un tableau numéroté séquentiellement à partir de deux tableaux numérotés séquentiellement - voici quelques options qui:
array_values(array_unique(array_merge($array1, $array2)));
(Réponse d'Adrien avec renumérotation des touches par la suite)
array_keys(array_flip($array1)+array_flip($array2))
(Mettez les valeurs dans les clés et utilisez l'opérateur d'union de tableau)
array_merge($array1, array_diff($array2, $array1))
(Supprimez les valeurs partagées du deuxième tableau avant la fusion)
Résultats de référence (pour la fusion de deux tableaux de longueur 1000 mille fois sur mon système):
Même test, mais avec les deux tableaux très similaires (au moins 80% en double):
Il semble que l'utilisation de l'opérateur d'union de tableau pour effectuer l'union réelle soit la méthode la plus rapide. Notez cependant que array_flip
n'est sûr que si les valeurs du tableau sont toutes des chaînes ou tous les entiers; si vous devez produire l'union d'un tableau d'objets, je recommande la version avec array_merge
et array_diff
.
Utilisation array_unique
et array_merge
ensemble.
Du code dans la documentation PHP: Array Operators :
<?php
$a = array("a" => "Apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b; // Union of $a and $b
echo "Union of \$a and \$b: \n";
var_dump($c);
$c = $b + $a; // Union of $b and $a
echo "Union of \$b and \$a: \n";
var_dump($c);
?>
Une fois exécuté, ce script affichera ce qui suit:
Union de $ a et $ b: Tableau (3) { ["A"] => Chaîne (5) "Apple" ["b"] => chaîne (6) "banane" ["c"] => chaîne (6) "cerise" } Union de $ b et $ a: Tableau (3) { ["A"] => Chaîne (4) "poire" ["b"] => chaîne (10) "fraise" ["c"] => chaîne (6) "cerise" }
utilisez l'opérateur "+" pour le faire. Voir le lien Opérateurs de tablea
$result = array_merge_recursive($first, $second);
peut être utile lorsque vous avez des tableaux avec des tableaux à l'intérieur.
L'OP n'a pas précisé si l'union se fait par valeur ou par clé et PHP a array_merge
pour fusionner les valeurs et +
pour fusionner les clés. Les résultats dépendent de l'indexation ou de la clé du tableau et quel tableau vient en premier.
$a = ['a', 'b'];
$b = ['b', 'c'];
$c = ['a' => 'A', 'b' => 'B'];
$d = ['a' => 'AA', 'c' => 'C'];
Voir array_merge
array_merge
array_merge($a, $b); // [0 => 'a', 1 => 'b', 2 => 'b', 3 => 'c']
array_merge($b, $a); // [0 => 'b', 1 => 'c', 2 => 'a', 3 => 'b']
+
opérateurVoir +
opérateur
$a + $b; // [0 => 'a', 1 => 'b']
$b + $a; // [0 => 'b', 1 => 'c']
array_merge
array_merge($c, $d); // ['a' => 'AA', 'b' => 'B', 'c' => 'C']
array_merge($d, $c); // ['a' => 'A', 'c' => 'C', 'b' => 'B']
+
opérateur$c + $d; // ['a' => 'A', 'b' => 'B', 'c' => 'C']
$d + $c; // ['a' => 'AA', 'c' => 'C', 'b' => 'B']
Utilisez simplement $array1 + $array2
Il en résultera l'union des deux tableaux.
Le +
opérateur:
$x[0] = 4;
$x[1] = 1;
$y[0] = 9;
$y[2] = 5;
$u = $y + $x;
// Results in:
$u[0] === 9;
$u[1] === 1;
$u[2] === 5;
Notez que $x + $y
! = $y + $x