Dans le développement quotidien, nous rencontrons souvent des situations où nous devons comparer deux tableaux et découvrir les différents éléments entre eux. Pour le moment, si vous trouvez simplement les éléments qui existent dans un tableau mais pas dans un autre tableau, la fonction Array_Diff () est suffisante. Mais si nous devons le découvrir, nous devons combiner array_diff () un peu.
Les ensembles de différence symétrique, en termes de laïcs, sont une collection d' éléments non apétitifs dans deux ensembles. Par exemple:
$array1 = [1, 2, 3, 4];
$array2 = [3, 4, 5, 6];
L'ensemble de différence symétrique de ces deux tableaux est [1, 2, 5, 6] car ces quatre nombres existent dans l'un des tableaux et n'existent pas dans l'autre.
array_diff () peut trouver des valeurs qui existent dans le premier tableau mais pas dans d'autres tableaux. Par conséquent, nous pouvons utiliser deux array_diff () pour obtenir l'ensemble de différence symétrique:
<?php
$array1 = [1, 2, 3, 4];
$array2 = [3, 4, 5, 6];
// Découvrir array1 Il y a array2 Rien dans
$diff1 = array_diff($array1, $array2);
// Découvrir array2 Il y a array1 Rien dans
$diff2 = array_diff($array2, $array1);
// Fusionner les résultats de deux ensembles différentiels
$symmetricDifference = array_merge($diff1, $diff2);
print_r($symmetricDifference);
?>
La sortie sera:
Array
(
[0] => 1
[1] => 2
[4] => 5
[5] => 6
)
Les clés ici peuvent ne pas être continues. Si vous avez besoin de réin-index, vous pouvez ajouter une phrase:
$symmetricDifference = array_values($symmetricDifference);
Supposons que vous construisez un système d'adhésion et que vous devez comparer les différences d'autorisations entre les deux groupes d'utilisateurs. Différentes autorisations peuvent être trouvées de cette manière:
<?php
$userGroupA = ['read', 'write', 'delete'];
$userGroupB = ['read', 'export', 'import'];
$diff1 = array_diff($userGroupA, $userGroupB);
$diff2 = array_diff($userGroupB, $userGroupA);
$permissionDiff = array_merge($diff1, $diff2);
$permissionDiff = array_values($permissionDiff);
print_r($permissionDiff);
// résultat:['write', 'delete', 'export', 'import']
?>
Bien que nous fusions deux différences mutuellement exclusives dans l'ensemble de différence symétrique, s'il y a des éléments en double dans le tableau, des résultats en double peuvent également être produits. Vous pouvez ajouter Array_Unique () à la déduplication:
$symmetricDifference = array_unique(array_merge($diff1, $diff2));
En combinant deux fonctions array_diff () , nous pouvons facilement obtenir l'ensemble de différence symétrique de deux tableaux. Cette méthode est à la fois claire et concise, et convient particulièrement aux systèmes d'autorisation, à la comparaison des données et à d'autres scénarios.
Vous pouvez encapsuler cette méthode dans une fonction pour améliorer la réutilisabilité:
function symmetric_diff(array $a, array $b): array {
return array_values(array_unique(array_merge(
array_diff($a, $b),
array_diff($b, $a)
)));
}
// Exemple d'appel
$result = symmetric_diff([1, 2, 3], [2, 3, 4]);
print_r($result); // Sortir:[1, 4]
J'espère que cette astuce peut vous aider dans votre projet PHP!