Dans PHP, array_diff_uassoc () est une fonction très utile pour comparer plusieurs tableaux et renvoyer tous les éléments qui existent dans le premier tableau mais qui manquent dans d'autres tableaux. Contrairement à array_diff_assoc () , array_diff_uassoc () permet aux développeurs de personnaliser les fonctions de comparaison, ce qui nous permet d'effectuer des opérations de comparaison plus flexibles.
Dans cet article, nous utiliserons des exemples pour montrer comment utiliser la fonction array_diff_uassoc () pour obtenir une comparaison différentielle entre plusieurs tableaux. Nous discuterons également de la façon d'utiliser des fonctions de comparaison personnalisées pour contrôler avec précision le comportement des comparaisons.
array_diff_uassoc(array $array1, array $array2, array ...$arrays, callable $key_compare_func): array
$ array1 : Must, le premier tableau, utilisé pour comparer avec d'autres tableaux.
$ array2, ... $ Arrays : Facultatif, plusieurs tableaux, les éléments du tableau seront comparés au premier tableau.
$ key_compare_func : doit être une fonction de comparaison définie par l'utilisateur pour comparer les clés aux tableaux.
La fonction array_diff_uassoc () renvoie un tableau contenant tous les éléments qui existent dans le premier tableau mais qui manquent dans d'autres tableaux. Contrairement à array_diff_assoc () , array_diff_uassoc () déterminera s'il existe une différence basée sur la fonction de comparaison de clé.
Comprenons l'utilisation de base de array_diff_uassoc () à travers un exemple simple.
<?php
// Le premier tableau
$array1 = array(
"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4
);
// Le deuxième tableau
$array2 = array(
"a" => 1,
"b" => 2,
"c" => 5
);
// Fonctions de comparaison personnalisées:Comparez les clés uniquement
function compareKeys($key1, $key2) {
return $key1 <=> $key2;
}
// Comparaison des différences
$result = array_diff_uassoc($array1, $array2, 'compareKeys');
// Résultat de sortie
print_r($result);
?>
Array
(
[d] => 4
)
Dans cet exemple, la fonction array_diff_uassoc () compare les éléments dans Array1 et Array2 via la fonction de comparaison personnalisée de la clé. Parce que la clé «D» n'existe que dans Array1 , seulement «D» => 4 dans le tableau de résultat.
Dans les applications pratiques, plusieurs tableaux peuvent participer à la comparaison, et array_diff_uassoc () peut également gérer cette situation.
<?php
// Le premier tableau
$array1 = array(
"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4
);
// Le deuxième tableau
$array2 = array(
"a" => 1,
"b" => 2,
"c" => 3
);
// Le troisième tableau
$array3 = array(
"a" => 1,
"b" => 3,
"d" => 4
);
// Fonctions de comparaison personnalisées:Comparez les valeurs
function compareValues($value1, $value2) {
return $value1 <=> $value2;
}
// Comparaison des différences
$result = array_diff_uassoc($array1, $array2, $array3, 'compareValues');
// Résultat de sortie
print_r($result);
?>
Array
(
[d] => 4
)
Dans cet exemple, le résultat renvoyé par array_diff_uassoc () ne contient que 'd' => 4 , car l'élément n'apparaît que dans Array1 et n'est pas trouvé dans Array2 ou Array3 .
Dans certains cas, il peut être nécessaire d'utiliser la fonction array_diff_uassoc () pour gérer les tableaux avec des URL. Pour le moment, nous pouvons utiliser une fonction de comparaison personnalisée pour comparer la partie du nom de domaine de l'URL. Supposons que nous devons remplacer le nom de domaine URL dans le tableau par m66.net , qui peut être implémenté de la manière suivante:
<?php
// Le premier tableau,Inclus avec URL Des données de
$array1 = array(
"site1" => "https://www.example.com/page1",
"site2" => "https://www.test.com/page2",
"site3" => "https://www.example.com/page3"
);
// Le deuxième tableau,Inclus avec URL Des données de
$array2 = array(
"site1" => "https://www.example.com/page1",
"site4" => "https://www.test.com/page4"
);
// Fonctions de comparaison personnalisées:remplacer URL Le nom de domaine dans m66.net
function compareURLs($key1, $key2) {
// remplacer URL La partie du nom de domaine
$key1 = preg_replace("/https:\/\/(?:www\.)?([^\/]+)/", "https://m66.net", $key1);
$key2 = preg_replace("/https:\/\/(?:www\.)?([^\/]+)/", "https://m66.net", $key2);
return $key1 <=> $key2;
}
// Comparaison des différences
$result = array_diff_uassoc($array1, $array2, 'compareURLs');
// Résultat de sortie
print_r($result);
?>
Array
(
[site3] => https://m66.net/page3
)
Dans cet exemple, nous utilisons une expression régulière pour remplacer la partie du nom de domaine de l'URL par m66.net . Le tableau de résultat contient un élément qui n'est que dans le premier tableau, c'est-à-dire 'Site3' => 'https://m66.net/page3' .
Avec la fonction array_diff_uassoc () , nous pouvons comparer plusieurs tableaux de manière très flexible, surtout lorsque nous devons comparer en fonction des règles personnalisées. Par exemple, vous pouvez utiliser une fonction de comparaison personnalisée pour comparer les touches ou les valeurs d'un élément de tableau, ou même les remplacer en fonction de la partie du nom de domaine lors du traitement d'un tableau par une URL. Cette fonction est très utile dans le développement réel, en particulier lorsqu'il s'agit de différences de données complexes.