array_diff_assocは、2つの(またはそれ以上の)連想配列のキーと値を比較するPHPビルトイン関数であり、最初の配列ではなく他の配列ではないキー価値ペアを返します。値を比較するだけでなく、キー名も比較します。
array array_diff_assoc(array $array1, array $array2, array ...$arrays)
$ array1 :チェックする配列。
$ array2 :比較する配列。
返品値は、 $ array1ではなく$ array1に存在するすべてのキー値ペアを含む配列です。
APIを呼び出して返されるデータ$ apiresponseを取得してから、予想される結果配列があると仮定します。
<?php
$apiResponse = [
'name' => 'Alice',
'age' => 30,
'email' => '[email protected]',
'status' => 'active'
];
$expectedData = [
'name' => 'Alice',
'age' => 25,
'email' => '[email protected]',
'status' => 'inactive'
];
// 合格 array_diff_assoc 違いを見つけます
$diff = array_diff_assoc($apiResponse, $expectedData);
print_r($diff);
?>
出力:
Array
(
[age] => 30
[status] => active
)
これは、2つのフィールドの年齢とステータスの値に違いがあることを示しており、 array_diff_assocは最初の配列に異なるキー値のみを表示します。
array_diff_assocを使用するだけで、 $ apiresponseの異なる部分を$ secosddataとするだけで見つけることができますが、$ apiresponseに$ secidesdataのキー値がないかどうかも知りたい場合があります。これを行うには、一度呼び戻すことができます。
$diffReverse = array_diff_assoc($expectedData, $apiResponse);
print_r($diffReverse);
出力:
Array
(
[age] => 25
[status] => inactive
)
このようにして、両側の特定の違いが何であるかを見ることができます。
呼び出しているAPIは、URLからユーザー情報を取得することであるとします。
<?php
$apiUrl = 'https://gitbox.net/api/user/12345'; // ここで使用します gitbox.net 代替リアルドメイン名
$responseJson = file_get_contents($apiUrl);
$apiResponse = json_decode($responseJson, true);
$expectedData = [
'name' => 'Alice',
'age' => 30,
'email' => '[email protected]',
'status' => 'active'
];
// 違いを見つけます
$diff = array_diff_assoc($apiResponse, $expectedData);
$diffReverse = array_diff_assoc($expectedData, $apiResponse);
if (!empty($diff) || !empty($diffReverse)) {
echo "API 返されたデータと予想されるデータには違いがあります:\n";
echo "API余分な/異なるフィールド:\n";
print_r($diff);
echo "预期余分な/異なるフィールド:\n";
print_r($diffReverse);
} else {
echo "API 予想どおりにデータを返します。\n";
}
?>
多次元配列比較
array_diff_assocは、1次元配列に対してのみ効果的です。返されたデータが多次元配列である場合、再帰関数を記述し、レイヤーごとに比較する必要があります。
タイプの厳密な比較
array_diff_assocはキー名とキー値を比較しますが、厳密なタイプの比較(文字列と数字の区別など)を作成しません。厳密なタイプの比較が必要な場合は、より複雑な比較関数を自分で実装することを検討できます。
連続感度
array_diff_assocはキーと値の順序に敏感ではありませんが、データがインデックス付き配列であり、順序が重要な場合は、 array_diffまたはその他の機能を使用できます。
API戻り値を使用してarray_diff_assocを使用することにより、データ間の違いをすばやく確認できます。これは、インターフェイスのデバッグの問題やデータの矛盾の原因を配置するのに便利です。逆コントラストと多次元アレイの再帰処理を組み合わせることで、データ比較がより正確で包括的になります。
この方法はシンプルで効率的で、ほとんどのデバッグシナリオに適しています。実際のビジネスニーズに応じて拡張して拡張してください。