2つの多次元配列があるとします。これらの2つの配列を比較し、最初の配列に表示されるが2番目の配列には存在しない要素を返したいとします。 Arrayの各レイヤーを再帰的に反復し、 Array_diff_assoc()を実行して比較することができます。
phpを使用して再帰的にarray_diff_assoc()を実装するためのサンプルコードは次のとおりです。
<?php
/**
* 多次元配列を再帰的に実装します array_diff_assoc() 関数
*
* @param array $array1 最初の配列
* @param array $array2 2番目の配列
* @return array 2つの配列間の違いの結果を返します
*/
function recursive_array_diff_assoc($array1, $array2) {
$difference = array();
// 遍历最初の配列
foreach ($array1 as $key => $value) {
// 如果2番目の配列没有此键,または、このキーの値が異なります
if (!array_key_exists($key, $array2)) {
// 値が配列の場合,再帰比較
$difference[$key] = is_array($value) ? recursive_array_diff_assoc($value, array()) : $value;
} else {
// 値が配列の場合,再帰比較
if (is_array($value) && is_array($array2[$key])) {
$recursive_diff = recursive_array_diff_assoc($value, $array2[$key]);
if (!empty($recursive_diff)) {
$difference[$key] = $recursive_diff;
}
} elseif ($value !== $array2[$key]) {
// 値が異なる場合,違いに追加します
$difference[$key] = $value;
}
}
}
return $difference;
}
// アレイの例
$array1 = array(
'a' => 1,
'b' => array(
'x' => 2,
'y' => 3
),
'c' => 4
);
$array2 = array(
'a' => 1,
'b' => array(
'x' => 2,
'y' => 4
),
'c' => 5
);
// 再帰的な方法を呼び出します
$result = recursive_array_diff_assoc($array1, $array2);
// 結果を印刷します
print_r($result);
?>
recursive_array_diff_assoc()関数:
この関数は、 $ array1と$ array2の2つの配列をパラメーターとして使用します。
最初の配列で各キー価値ペアをforeachによって横断します。
各要素について、最初にキーが2番目の配列に含まれているかどうかを確認し、そうでない場合は、要素を戻り結果に直接追加します。
要素が配列の場合、 recursive_array_diff_assoc()を使用して多次元配列を比較し続けます。
最後に、すべての異なる要素が返されます。
再帰処理:
配列要素に遭遇すると、同じ関数を再帰的に呼び出して、多次元配列内の各レイヤーが比較されるようにします。
遭遇した要素が基本的なデータ型(整数、文字列など)である場合、その値を直接比較します。
結果出力:
print_r($ result)を使用して結果を出力します。この例では、 $ array1と$ array2を比較した後、出力には2つの差が含まれます。
Array
(
[b] => Array
(
[y] => 3
)
[c] => 4
)
再帰モードを介して、PHPに多次元配列のarray_diff_assoc()関数を実装できます。この方法により、配列にネストされたサブアレイがある場合でも、各レベルでのキー名と値の違いを正しく処理できるようになります。