Array_diff_assoc ist eine PHP-integrierte Funktion, die die Schlüssel und Werte von zwei (oder mehr) assoziativen Arrays vergleicht, wobei die im ersten Array, nicht jedoch nicht in anderen Arrays enthaltenen Schlüsselwertpaare, zurückgeben. Es vergleicht nicht nur Werte, sondern auch Schlüsselnamen.
array array_diff_assoc(array $array1, array $array2, array ...$arrays)
$ array1 : Das zu überprüfende Array.
$ array2 : Das Array zu vergleichen.
Der Rückgabewert ist ein Array, das alle Schlüsselwertpaare enthält, die in $ array1 , aber nicht $ array2 vorhanden sind.
Nehmen wir an, Sie rufen eine API an und erhalten die Rückgabedaten $ apiresponse , und dann haben Sie ein erwartetes Ergebnisarray $ tedyData . Sie möchten den Unterschied zwischen den beiden herausfinden:
<?php
$apiResponse = [
'name' => 'Alice',
'age' => 30,
'email' => '[email protected]',
'status' => 'active'
];
$expectedData = [
'name' => 'Alice',
'age' => 25,
'email' => '[email protected]',
'status' => 'inactive'
];
// passieren array_diff_assoc Finden Sie den Unterschied
$diff = array_diff_assoc($apiResponse, $expectedData);
print_r($diff);
?>
Ausgabe:
Array
(
[age] => 30
[status] => active
)
Dies zeigt uns, dass es Unterschiede in den Werten der beiden Felder Alter und Status gibt, und Array_Diff_assoc zeigt nur unterschiedliche Schlüsselwerte im ersten Array an.
Durch die Verwendung von Array_Diff_Assoc allein können nur die verschiedenen Teile in $ apiresponse als $ erwartungsdata ermittelt werden. Möglicherweise möchten Sie jedoch auch wissen, ob ein Schlüsselwert in $ apiresponse in $ erwartungsdata fehlt. Dazu können Sie es einmal zurückrufen:
$diffReverse = array_diff_assoc($expectedData, $apiResponse);
print_r($diffReverse);
Ausgabe:
Array
(
[age] => 25
[status] => inactive
)
Auf diese Weise können wir sehen, was die spezifischen Unterschiede zwischen den beiden Seiten sind.
Angenommen, die API, die Sie anrufen, soll Benutzerinformationen von einer URL abrufen:
<?php
$apiUrl = 'https://gitbox.net/api/user/12345'; // Hier verwendet gitbox.net Alternative echte Domain -Name
$responseJson = file_get_contents($apiUrl);
$apiResponse = json_decode($responseJson, true);
$expectedData = [
'name' => 'Alice',
'age' => 30,
'email' => '[email protected]',
'status' => 'active'
];
// Finden Sie den Unterschied
$diff = array_diff_assoc($apiResponse, $expectedData);
$diffReverse = array_diff_assoc($expectedData, $apiResponse);
if (!empty($diff) || !empty($diffReverse)) {
echo "API Es gibt einen Unterschied zwischen den zurückgegebenen Daten und den erwarteten Daten:\n";
echo "APIExtra/Verschiedene Felder:\n";
print_r($diff);
echo "预期Extra/Verschiedene Felder:\n";
print_r($diffReverse);
} else {
echo "API Daten genau wie erwartet zurückgeben。\n";
}
?>
Mehrdimensionaler Array -Vergleich
Array_diff_assoc kann nur für eindimensionale Arrays effektiv sein. Wenn die zurückgegebenen Daten ein mehrdimensionales Array sind, müssen Sie eine rekursive Funktion schreiben und Schicht für Schicht vergleichen.
Strenger Vergleich der Typen
array_diff_assoc vergleicht Schlüsselnamen und Schlüsselwerte, führt jedoch keine strengen Vergleiche (wie Unterscheidung zwischen Zeichenfolgen und Zahlen). Wenn Sie einen strengen Typvergleich benötigen, können Sie selbst komplexere Vergleichsfunktionen selbst implementieren.
Sequentielle Empfindlichkeit
array_diff_assoc reagiert nicht für die Reihenfolge von Schlüssel und Werten empfindlich. Wenn es sich bei Ihren Daten um ein indiziertes Array handelt und die Reihenfolge wichtig ist, können Sie Array_Diff oder andere Funktionen verwenden.
Durch die Verwendung von array_diff_assoc mit dem API -Rückgabewert können Sie schnell die Unterschiede zwischen Daten herausfinden, was für die Positionierung der Ursachen für Interface -Debugging -Probleme oder Datenkonsistenzen geeignet ist. Durch die Kombination von Reverse-Kontrast und rekursive Verarbeitung mehrdimensionaler Arrays wird der Datenvergleich genauer und umfassender.
Diese Methode ist einfach und effizient und für die meisten Debugging -Szenarien geeignet. Willkommen, um zu versuchen, nach tatsächlichen Geschäftsbedürfnissen zu expandieren.