現在の位置: ホーム> 最新記事一覧> 再帰方法を使用して、多次元配列のarray_diff_assoc()を実装します

再帰方法を使用して、多次元配列のarray_diff_assoc()を実装します

M66 2025-06-06

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);

?>

コード解析

  1. recursive_array_diff_assoc()関数

    • この関数は、 $ array1$ array2の2つの配列をパラメーターとして使用します。

    • 最初の配列で各キー価値ペアをforeachによって横断します。

    • 各要素について、最初にキーが2番目の配列に含まれているかどうかを確認し、そうでない場合は、要素を戻り結果に直接追加します。

    • 要素が配列の場合、 recursive_array_diff_assoc()を使用して多次元配列を比較し続けます。

    • 最後に、すべての異なる要素が返されます。

  2. 再帰処理

    • 配列要素に遭遇すると、同じ関数を再帰的に呼び出して、多次元配列内の各レイヤーが比較されるようにします。

    • 遭遇した要素が基本的なデータ型(整数、文字列など)である場合、その値を直接比較します。

  3. 結果出力

    • print_r($ result)を使用して結果を出力します。この例では、 $ array1$ array2を比較した後、出力には2つの差が含まれます。

サンプル出力

Array
(
    [b] => Array
        (
            [y] => 3
        )
    [c] => 4
)

要約します

再帰モードを介して、PHPに多次元配列のarray_diff_assoc()関数を実装できます。この方法により、配列にネストされたサブアレイがある場合でも、各レベルでのキー名と値の違いを正しく処理できるようになります。