Array_Diff_assoc est une fonction intégrée PHP qui compare les clés et les valeurs de deux (ou plus) tableaux associatifs, renvoyant des paires de valeurs clés qui sont dans le premier tableau mais pas dans d'autres tableaux. Il compare non seulement les valeurs, mais compare également les noms de clés.
array array_diff_assoc(array $array1, array $array2, array ...$arrays)
$ Array1 : le tableau à vérifier.
$ array2 : le tableau à comparer.
La valeur de retour est un tableau contenant toutes les paires de valeurs clés qui existent dans $ array1 mais pas $ array2 .
Supposons que vous appeliez une API et obtenez les données de retour $ apiResponse , puis vous avez un tableau de résultat attendu $ attendudata , vous souhaitez découvrir la différence entre les deux:
<?php
$apiResponse = [
'name' => 'Alice',
'age' => 30,
'email' => '[email protected]',
'status' => 'active'
];
$expectedData = [
'name' => 'Alice',
'age' => 25,
'email' => '[email protected]',
'status' => 'inactive'
];
// passer array_diff_assoc Trouvez la différence
$diff = array_diff_assoc($apiResponse, $expectedData);
print_r($diff);
?>
Sortir:
Array
(
[age] => 30
[status] => active
)
Cela nous indique qu'il existe des différences dans les valeurs de l'âge et du statut des deux champs, et Array_Diff_assoc affiche uniquement différentes valeurs de clés dans le premier tableau.
L'utilisation de Array_Diff_assoc à elle seule ne peut trouver que les différentes parties dans $ apiResponse que $ attenddata , mais peut également vouloir savoir s'il manque une valeur clé dans $ apiResponse dans $ attendudata . Pour ce faire, vous pouvez le rappeler une fois:
$diffReverse = array_diff_assoc($expectedData, $apiResponse);
print_r($diffReverse);
Sortir:
Array
(
[age] => 25
[status] => inactive
)
De cette façon, nous pouvons voir quelles sont les différences spécifiques entre les deux parties.
Supposons que l'API que vous appelez soit d'obtenir des informations utilisateur à partir d'une URL:
<?php
$apiUrl = 'https://gitbox.net/api/user/12345'; // Utilisé ici gitbox.net Nom de domaine réel alternatif
$responseJson = file_get_contents($apiUrl);
$apiResponse = json_decode($responseJson, true);
$expectedData = [
'name' => 'Alice',
'age' => 30,
'email' => '[email protected]',
'status' => 'active'
];
// Trouvez la différence
$diff = array_diff_assoc($apiResponse, $expectedData);
$diffReverse = array_diff_assoc($expectedData, $apiResponse);
if (!empty($diff) || !empty($diffReverse)) {
echo "API Il y a une différence entre les données retournées et les données attendues:\n";
echo "APISupplémentaire/Différents champs:\n";
print_r($diff);
echo "预期Supplémentaire/Différents champs:\n";
print_r($diffReverse);
} else {
echo "API Retourner les données exactement comme prévu。\n";
}
?>
Comparaison multidimensionnelle du tableau
array_diff_assoc ne peut être efficace que pour les tableaux unidimensionnels. Si les données renvoyées sont un tableau multidimensionnel, vous devez écrire une fonction récursive et comparer la couche par couche.
Comparaison stricte des types
array_diff_assoc compare les noms de clés et les valeurs clés, mais ne fait pas de comparaisons de type strictes (telles que la distinction entre les chaînes et les nombres). Si vous avez besoin d'une comparaison de type stricte, vous pouvez envisager de mettre en œuvre vous-même des fonctions de comparaison plus complexes.
Sensibilité séquentielle
array_diff_assoc n'est pas sensible à l'ordre des clés et des valeurs, mais si vos données sont un tableau indexé et que l'ordre est important, vous pouvez utiliser Array_diff ou d'autres fonctions.
En utilisant array_diff_assoc avec la valeur de retour de l'API, vous pouvez rapidement trouver les différences entre les données, ce qui est pratique pour positionner les causes des problèmes de débogage d'interface ou des incohérences de données. La combinaison du contraste inverse et du traitement récursif des tableaux multidimensionnels rendra la comparaison des données plus précise et plus complète.
Cette méthode est simple et efficace, adaptée à la plupart des scénarios de débogage. Bienvenue pour essayer de se développer en fonction des besoins commerciaux réels.
Étiquettes associées:
API