當前位置: 首頁> 最新文章列表> 使用遞歸方式實現多維數組的array_diff_assoc()

使用遞歸方式實現多維數組的array_diff_assoc()

M66 2025-06-06

假設我們有兩個多維數組,我們希望比較這兩個數組並返回那些在第一個數組中出現但在第二個數組中不存在的元素。我們可以通過遞歸遍歷數組的每一層,並執行array_diff_assoc()進行對比。

以下是使用PHP 遞歸實現array_diff_assoc()的示例代碼:

 <?php

/**
 * 遞歸實現多維數組的 array_diff_assoc() 功能
 *
 * @param array $array1 第一個數組
 * @param array $array2 第二個數組
 * @return array 返回兩個數組差異的結果
 */
function recursive_array_diff_assoc($array1, $array2) {
    $difference = array();

    // 遍历第一個數組
    foreach ($array1 as $key => $value) {
        // 如果第二個數組没有此键,或者此鍵的值不同
        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

    • 我們通過foreach遍歷第一個數組中的每個鍵值對。

    • 對於每個元素,我們首先檢查第二個數組中是否包含該鍵,如果不包含,直接將該元素添加到返回結果中。

    • 如果該元素是一個數組,我們使用遞歸調用recursive_array_diff_assoc()來繼續比較多維數組。

    • 最終,將所有不同的元素返回。

  2. 遞歸處理

    • 當遇到數組元素時,我們遞歸地調用相同的函數,以確保比較多維數組中的每一層。

    • 如果遇到的元素是基本數據類型(如整數、字符串等),我們直接比較其值。

  3. 結果輸出

    • print_r($result)用於輸出結果。在例子中, $array1$array2比較後,輸出包含了兩者之間的差異。

示例輸出

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

總結

通過遞歸方式,我們可以實現PHP 中多維數組的array_diff_assoc()功能。這個方法確保了即使在數組中有嵌套的子數組時,也能夠正確地處理每個層級的鍵名和值的差異。