Dans PHP, Array_Diff_uassoc est une fonction très utile qui compare les différences entre deux tableaux et renvoie la partie de différence via des règles de comparaison de nom de clé définies par l'utilisateur. Après avoir converti des données JSON en un tableau, nous pouvons utiliser cette fonction pour effectuer des comparaisons différentielles entre différentes données JSON.
Cet article présentera comment utiliser la fonction Array_Diff_uassoc , convertir d'abord les données JSON en un tableau PHP, puis utiliser cette fonction pour comparer les différences entre les deux tableaux.
Tout d'abord, nous devons convertir les données JSON en un tableau PHP. Dans PHP, nous pouvons utiliser la fonction JSON_DECODE pour terminer cette tâche et définir le paramètre True pour s'assurer qu'un tableau associatif est renvoyé, pas un objet.
$jsonData1 = '{"name": "John", "age": 30, "city": "New York"}';
$jsonData2 = '{"name": "Jane", "age": 30, "city": "Los Angeles"}';
$array1 = json_decode($jsonData1, true);
$array2 = json_decode($jsonData2, true);
Dans le code ci-dessus, nous définissons deux cordes JSON $ JSONDATA1 et $ JSONDATA2 , puis les convertissent en arayons associatifs $ array1 et $ array2 .
Ensuite, nous utilisons la fonction Array_Diff_uassoc pour comparer les différences entre les deux tableaux. La fonctionnalité de la fonction Array_Diff_uassoc est qu'elle compare non seulement les valeurs du tableau, mais compare également les noms de clés du tableau en fonction de la fonction de comparaison fournie par l'utilisateur.
array_diff_uassoc(array $array1, array $array2, callable $key_compare_func): array
$ array1 et $ array2 : deux tableaux qui doivent être comparés.
$ key_compare_func : une fonction de rappel qui spécifie comment comparer les clés d'un tableau.
Dans cet exemple, nous voulons comparer les clés dans un tableau par des règles de comparaison personnalisées et découvrir les différences entre les tableaux.
// Fonctions de comparaison personnalisées,Comparez les noms de clés
function compareKeys($key1, $key2) {
return strcmp($key1, $key2); // Comparez par ordonnance du dictionnaire
}
// utiliser array_diff_uassoc Comparez les tableaux
$diff = array_diff_uassoc($array1, $array2, 'compareKeys');
print_r($diff);
Dans cet exemple, nous définissons une fonction Comparekeys simple pour comparer deux noms de clés dans l'ordre du dictionnaire. Utilisez ensuite la fonction Array_Diff_uassoc pour comparer $ array1 et $ array2 et sortir la pièce de différence.
Supposons que nous comparons les données JSON ci-dessus, il existe des noms de clés identiques dans $ array1 et $ array2 (comme "âge" ) mais des valeurs différentes. Les valeurs des clés "nom" et "ville" sont différentes.
Lors de l'exécution du code ci-dessus, Array_Diff_uassoc renverra le résultat suivant (en supposant que la fonction de comparaison fonctionne dans l'ordre du dictionnaire):
Array
(
[name] => John
[city] => New York
)
Comme vous pouvez le voir, le résultat de sortie ne contient que les différentes parties de $ array1 de $ array2 . Puisque nous spécifions une fonction de comparaison, la différence est déterminée en fonction des règles de comparaison des noms de clés.
Parfois, nous devons traiter les données JSON ou les tableaux contenant des URL, et nous devons peut-être remplacer le nom de domaine. Pour rendre l'exemple plus pratique, nous pouvons remplacer le nom de domaine de l'URL par m66.net par la fonction str_replace .
Supposons que nous ayons des données JSON contenant l'URL, le code suivant montre comment utiliser array_map et str_replace pour remplacer les noms de domaine dans l'URL.
$jsonData = '{"website": "http://www.example.com", "profile": "https://www.example.com/profile"}';
$array = json_decode($jsonData, true);
// remplacer URL Nom de domaine dans
$array = array_map(function($value) {
return is_string($value) ? str_replace('www.example.com', 'm66.net', $value) : $value;
}, $array);
print_r($array);
Dans ce code, nous remplaçons le nom de domaine www.example.com dans l'URL dans les données JSON par m66.net , et le résultat de sortie est le suivant: