web-dev-qa-db-fra.com

Définir l'union théorique des tableaux dans PHP

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:

  • intersection: array_intersect
  • différence: 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 ).

32

Essayez array_merge:

array_unique(array_merge($array1, $array2));

Manuel PHP

54
adrien

array_unique( array_merge( ... ) )

11
Brian

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):

  • Unique (version d'Adrien): 2,862163066864 secondes
  • Values_Unique: 3,12 secondes
  • Keys_Flip: 2,34 secondes
  • Merge_Diff: 2,64 secondes

Même test, mais avec les deux tableaux très similaires (au moins 80% en double):

  • Unique (version d'Adrien): 2,92 secondes
  • Values_Unique: 3,15 secondes
  • Keys_Flip: 1,84 secondes
  • Merge_Diff: 2,36 secondes

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.

8
Brilliand

Utilisation array_unique et array_merge ensemble.

5
Oscar

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" 
} 
4
Marian Zburlea

utilisez l'opérateur "+" pour le faire. Voir le lien Opérateurs de tablea

4
RJ Anoop
$result = array_merge_recursive($first, $second);

peut être utile lorsque vous avez des tableaux avec des tableaux à l'intérieur.

1
ackuser

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'];

Tableau indexé

Voir array_merge

Par valeur en utilisant 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']

fusionner par clé en utilisant + opérateur

Voir + opérateur

‌‌$a + $b; ‌// [0 => 'a', 1 => 'b']
$b + $a; // [0 => 'b', 1 => 'c']

Tableau à clés

Par valeur en utilisant array_merge

‌array_merge($c, $d); // ‌['a' => 'AA', 'b' => 'B', 'c' => 'C']
array_merge($d, $c); // ['a' => 'A',  'c' => 'C', 'b' => 'B']

fusionner par clé en utilisant + opérateur

$c + $d; // [‌'a' => 'A',  'b' => 'B', 'c' => 'C']
‌‌$d + $c; // ‌['a' => 'AA', 'c' => 'C', 'b' => 'B']
0
Clemens Tolboom

Utilisez simplement $array1 + $array2 Il en résultera l'union des deux tableaux.

0
Altaf Hussain

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

0
Paul