PHPでは、 array_diff_uassocは非常に便利な関数であり、2つの配列の違いを比較し、ユーザー定義のキー名比較ルールを介して差の部分を返します。 JSONデータを配列に変換した後、この関数を使用して、異なるJSONデータ間の微分比較を実行できます。
この記事では、 array_diff_uassoc関数の使用方法を紹介し、最初にJSONデータをPHPアレイに変換し、次にこの関数を使用して2つの配列の違いを比較します。
まず、JSONデータをPHPアレイに変換する必要があります。 PHPでは、 json_decode関数を使用してこのタスクを完了し、パラメーターを真に設定して、オブジェクトではなく連想配列が返されることを確認できます。
$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);
上記のコードでは、2つのJSON文字列$ jSondata1と$ jSondata2を定義し、それらを連想配列$ array1と$ array2に変換します。
次に、 array_diff_uassoc関数を使用して、2つの配列の違いを比較します。 array_diff_uassoc関数の機能は、配列の値を比較するだけでなく、ユーザーが提供する比較関数に基づいて配列のキー名を比較することです。
array_diff_uassoc(array $array1, array $array2, callable $key_compare_func): array
$ array1および$ array2 :比較する必要がある2つの配列。
$ key_compare_func :配列のキーを比較する方法を指定するコールバック関数。
この例では、アレイのキーをカスタム比較ルールで比較し、配列間の違いを確認します。
// カスタム比較関数,キー名を比較します
function compareKeys($key1, $key2) {
return strcmp($key1, $key2); // 辞書順序で比較します
}
// 使用 array_diff_uassoc 配列を比較します
$diff = array_diff_uassoc($array1, $array2, 'compareKeys');
print_r($diff);
この例では、辞書の順序で2つのキー名を比較するための単純な比較キー機能を定義します。次に、 array_diff_uassoc関数を使用して、 $ array1と$ array2を比較し、差分パーツを出力します。
上記のJSONデータを比較すると、 $ array1と$ array2 ( 「age」など)には同じキー名がありますが、値は異なります。 「名前」と「都市」キーの値は異なります。
上記のコードを実行すると、 array_diff_uassocは次の結果を返します(比較関数が辞書の順序で機能すると仮定します):
Array
(
[name] => John
[city] => New York
)
ご覧のとおり、出力結果には$ array2の$ array1の異なる部分のみが含まれています。比較関数を指定するため、違いはキー名の比較ルールに基づいて決定されます。
JSONデータまたはURLを含む配列を処理する必要がある場合があり、その中のドメイン名を置き換える必要がある場合があります。この例をより実用的にするために、URLのドメイン名をM66.NETにSTR_REPLACE関数に置き換えることができます。
URLを含むJSONデータがあると仮定します。次のコードは、 array_mapとstr_replaceを使用してURLのドメイン名をバッチする方法を示しています。
$jsonData = '{"website": "http://www.example.com", "profile": "https://www.example.com/profile"}';
$array = json_decode($jsonData, true);
// 交換する URL ドメイン名
$array = array_map(function($value) {
return is_string($value) ? str_replace('www.example.com', 'm66.net', $value) : $value;
}, $array);
print_r($array);
このコードでは、JSONデータのURLにあるドメイン名www.example.comをM66.netに置き換えます。出力結果は次のとおりです。