當前位置: 首頁> 最新文章列表> 當使用PHP 的array_diff_uassoc 函數時,返回0、-1 和1 會有什麼不同的效果?

當使用PHP 的array_diff_uassoc 函數時,返回0、-1 和1 會有什麼不同的效果?

M66 2025-05-15

在PHP 中, array_diff_uassoc()函數用於比較兩個數組的差異,並且可以自定義比較鍵的規則。該函數的基本語法如下:

 array_diff_uassoc(array $array1, array $array2, callable $key_compare_func): array
  • $array1是第一個數組。

  • $array2是第二個數組,和$array1進行比較。

  • $key_compare_func是一個回調函數,用於比較兩個鍵。

array_diff_uassoc()函數會返回一個包含$array1中存在但在$array2中不存在的元素的數組。其比較是基於鍵名(使用自定義的回調函數)。但你可能會遇到一些疑問,當key_compare_func返回值為0-11時,這些不同的返回值會對函數的結果產生什麼影響呢?

1. 返回0 的效果

key_compare_func回調函數返回0時,表示兩個鍵是相等的。在array_diff_uassoc()函數中,這意味著$array1$array2的當前鍵值對在鍵名上沒有差異。因此,這些鍵值對不會被視為差異的一部分,不會出現在返回的結果數組中。

示例:

 $array1 = [
    'apple' => 'red',
    'banana' => 'yellow'
];

$array2 = [
    'apple' => 'green',
    'banana' => 'yellow'
];

function compare_keys($key1, $key2) {
    return 0;  // 表示兩個鍵相同
}

$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);

輸出:

 Array
(
    [apple] => red
)

解釋:由於compare_keys()返回0 ,表示鍵名applebanana是相等的, array_diff_uassoc()認為它們沒有差異,因此返回數組中只包含鍵apple對應的值'red'

2. 返回-1 的效果

key_compare_func返回-1時,表示$array1中的鍵小於$array2中的鍵。在這種情況下, array_diff_uassoc()認為$array1中的當前鍵值對應該保留,因為它在$array2中沒有找到完全相同的鍵。因此,這些鍵值對會出現在結果數組中。

示例:

 $array1 = [
    'apple' => 'red',
    'banana' => 'yellow'
];

$array2 = [
    'apple' => 'green',
    'cherry' => 'red'
];

function compare_keys($key1, $key2) {
    return -1;  // 表示 key1 小於 key2
}

$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);

輸出:

 Array
(
    [banana] => yellow
)

解釋:由於compare_keys()返回-1 ,表示鍵apple小於鍵cherry ,因此banana$array1中沒有找到對應的鍵對,所以banana對應的鍵值對會出現在結果數組中。

3. 返回1 的效果

key_compare_func返回1時,表示$array1中的鍵大於$array2中的鍵。此時, array_diff_uassoc()認為$array1中的當前鍵值對是多餘的,因此它會被排除在結果數組之外。

示例:

 $array1 = [
    'apple' => 'red',
    'banana' => 'yellow'
];

$array2 = [
    'apple' => 'green',
    'banana' => 'yellow'
];

function compare_keys($key1, $key2) {
    return 1;  // 表示 key1 大於 key2
}

$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);

輸出:

 Array
(
    [apple] => red
)

解釋:在此示例中, compare_keys()返回1 ,表示鍵apple大於鍵banana 。因此, apple的鍵值對在$array1中找不到與$array2完全相同的鍵對,它會出現在返回的數組中。

總結

在使用array_diff_uassoc()時,回調函數的返回值0-11會直接影響鍵的比較方式:

  • 返回0 :表示鍵相等,當前鍵值對不被視為差異。

  • 返回-1 :表示$array1中的鍵小於$array2中的鍵,當前鍵值對會出現在結果數組中。

  • 返回1 :表示$array1中的鍵大於$array2中的鍵,當前鍵值對會被排除。

通過調整回調函數的比較邏輯,我們可以靈活地控制比較規則,從而實現自定義的差異比較。