PHPのarray_diff_assoc()関数は、2つの配列を比較するために使用され、2番目の配列ではなく、最初の配列にすべての要素を含む配列を返します。比較プロセスでは、要素の値が考慮されるだけでなく、要素の鍵も考慮されます。ただし、 array_diff_assoc()出力が一貫していない状況に遭遇する場合があります。この記事では、この問題を解決する方法について説明します。
array_diff_assoc()関数の基本的な使用法は次のとおりです。
$array1 = array("a" => "apple", "b" => "banana", "c" => "cherry");
$array2 = array("a" => "apple", "b" => "banana");
$result = array_diff_assoc($array1, $array2);
print_r($result);
この例では、 $ resultが出力します。
Array
(
[c] => cherry
)
これは、キー価値のペア「A」=>「Apple」と「B」=>「バナナ」が両方の配列に存在するため、それらは除外されているためです。残っているのは、キー「C」と対応する値「チェリー」です。
array_diff_assoc()は非常に便利なツールですが、場合によっては、その出力が期待したものと一致しない場合があります。問題は通常、次の状況で発生します。
array_diff_assoc()は、値を比較するだけでなく、配列を比較するときにキーのデータ型を比較します。 2つの配列の要素のキーまたは値のデータ型が異なる場合、 array_diff_assoc()はそれらを不平等であると見なします。
$array1 = array("a" => "1");
$array2 = array("a" => 1);
$result = array_diff_assoc($array1, $array2);
print_r($result);
この例では、値「1」と1は異なるデータ型のために同じように見えますが、 array_diff_assoc()はそれらが不平等であると見なされ、結果は次のとおりです。
Array
(
[a] => 1
)
array_diff_assoc()は、キーと値のペアのキーと値を比較しますが、キーの順序は気にしません。 2つの配列のキー価値のペアの順序が異なる場合でも、結果は予想通りではない場合があります。
いくつかのアプリケーションシナリオでは、URL比較に関与する可能性があります。 URLのドメイン名部分が異なる場合、 array_diff_assoc()も一貫して出力される場合があります。例えば:
$array1 = array("url" => "http://example.com/page1");
$array2 = array("url" => "http://m66.net/page1");
$result = array_diff_assoc($array1, $array2);
print_r($result);
この場合、 array_diff_assoc()は、2つの配列の「url」値を考慮して、一貫性のない結果を返します。
データ型が一貫していることを確認します。比較する前に、2つの配列のキーと値のデータ型が一貫していることを確認してください。必要に応じて、 intval() 、 strval() 、またはfloatval()などの関数を使用して、データ型を統合できます。
手動の比較URL :URL比較の問題については、URLのドメイン名パーツを同じドメイン名に置き換える前に、比較することができます。すべてのURLにM66.NETをドメイン名として使用したいと仮定すると、次の方法を使用できます。