PHP では、多次元配列は非常に一般的なデータ構造であり、いくつかの複雑なデータ関係を簡単に表現できます。しかし、実際の開発では、2 つの多次元配列の違いを比較しなければならないことが多く、これは非常に困難な作業です。この記事では、PHP を使用して 2 つの多次元配列を比較し、それらの違いを見つける方法について説明します。
便宜上、最初に 2 つの多次元配列、つまり $arr1 と $arr2 を定義します。サンプル コードを以下に示します。
$arr1 = array( 'name' => 'Tom', 'age' => 20, 'address' => array( 'city' => 'Beijing', 'region' => 'Haidian', ), 'contact' => array( 'phone' => '123456', 'email' => 'tom@example.com', ), ); $arr2 = array( 'name' => 'Jerry', 'age' => 22, 'address' => array( 'city' => 'Beijing', 'region' => 'Chaoyang', ), 'contact' => array( 'phone' => '789012', 'email' => 'jerry@example.com', ), );
上記のコードでは、$arr1 と $arr2 の両方に、同じキーと値のペアと異なるキーと値のペアが含まれており、キーと値のペアの一部の値も配列。これら 2 つの配列を比較し、それらの差を出力したいとします。
まず、array_diff_assoc() 関数を使用して 2 つの配列間の違いを比較できます。この関数は、$arr1 には存在するが $arr2 には存在しないキーと値のペアとその値を返します。コードは次のとおりです:
$diff1 = array_diff_assoc($arr1, $arr2); print_r($diff1);
出力は次のとおりです:
Array ( [name] => Tom [age] => 20 [address] => Array ( [region] => Haidian ) [contact] => Array ( [phone] => 123456 [email] => tom@example.com ) )
ご覧のとおり、$diff1 には、$arr1 には存在するが $arr2 には存在しないキーと値のペアが含まれています。彼らの価値観も。このうち、「name」キーに対応する値は「Tom」、「age」キーに対応する値は20、「address」キーに対応する値は「region」キーと値のペアを含む配列です。 、および「contact」キーに対応する値 Value も配列です。
次に、再帰関数を使用して、配列を含む $arr1 と $arr2 内のすべてのキーと値のペア間の違いを比較します。コードは次のとおりです。
function compareArray($arr1, $arr2) { $diff = array(); foreach ($arr1 as $key => $val1) { if (is_array($val1) && isset($arr2[$key]) && is_array($arr2[$key])) { $diff[$key] = compareArray($val1, $arr2[$key]); } elseif (!isset($arr2[$key]) || $arr2[$key] !== $val1) { $diff[$key] = $val1; } } foreach ($arr2 as $key => $val2) { if (is_array($val2) && (!isset($arr1[$key]) || !is_array($arr1[$key]))) { $diff[$key] = $val2; } } return $diff; } $diff2 = compareArray($arr1, $arr2); print_r($diff2);
出力結果は次のとおりです。
Array ( [name] => Tom [age] => 20 [address] => Array ( [region] => Haidian ) [contact] => Array ( [phone] => 123456 [email] => tom@example.com ) )
ご覧のとおり、$diff2 は、$arr1 と $ の配列を含むすべてのキーと値のペアの差を出力します。 ar2.このうち、「name」キーに対応する値は「Tom」、「age」キーに対応する値は20、「address」キーに対応する値は「region」キーと値のペアを含む配列です。 、および「contact」キーに対応する値 Value も配列です。
最後に、$diff1 と $diff2 を比較して、それらがどのように似ているか、どのように異なるかを判断できます。コードは次のとおりです:
$intersection = array_intersect_assoc($diff1, $diff2); $difference = array_merge($diff1, $diff2); $difference = array_diff_key($difference, $intersection); echo "intersection: "; print_r($intersection); echo "difference: "; print_r($difference);
出力結果は次のとおりです:
intersection: Array ( [name] => Tom [age] => 20 [address] => Array ( [region] => Haidian ) [contact] => Array ( [phone] => 123456 [email] => tom@example.com ) ) difference: Array ( [name] => Jerry [age] => 22 [address] => Array ( [region] => Chaoyang ) [contact] => Array ( [phone] => 789012 [email] => jerry@example.com ) )
ご覧のとおり、$intersection には $diff1 と $diff2 の両方に存在するキーと値のペアが含まれています。 $arr1 と $arr2 は同じキーと値のペアです。 $diffference には、$diff1 と $diff2 に存在する異なるキーと値のペアが含まれます。
要約すると、PHP の array_diff_assoc() 関数と再帰関数を使用して、2 つの多次元配列を比較し、それらの違いを見つけることができます。この方法は比較的複雑ですが、非常に実用的であり、実際の開発で広く使用できます。
以上がPHP の多次元配列の比較は異なりますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。