當前位置: 首頁> 最新文章列表> 用array_map() 轉換數組再使用array_diff_uassoc() 比較

用array_map() 轉換數組再使用array_diff_uassoc() 比較

M66 2025-05-15

在PHP 中, array_map()array_diff_uassoc()是兩個非常有用的函數,它們可以在不同的場景下幫助我們對數組進行處理和比較。本文將介紹如何通過先使用array_map()轉換數組,再使用array_diff_uassoc()進行比較,並且給出具體示例。

1. array_map()函數簡介

array_map()函數可以通過回調函數對數組的每個元素進行轉換。其基本語法如下:

 array_map(callable $callback, array $array1, array ...$arrays);
  • $callback :用於處理數組元素的回調函數。

  • $array1, ...$arrays :一個或多個輸入數組。

array_map()會返回一個新的數組,其中每個元素都是通過$callback函數處理後的值。

2. array_diff_uassoc()函數簡介

array_diff_uassoc()函數用於比較兩個或多個數組,返回第一個數組中與其他數組相比,鍵名和值都不相等的元素。與常規的array_diff()不同, array_diff_uassoc()允許我們提供一個自定義的比較函數來比較鍵名。

其基本語法如下:

 array_diff_uassoc(array $array1, array $array2, callable $key_compare_func);
  • $array1 :要比較的第一個數組。

  • $array2 :要比較的第二個數組。

  • $key_compare_func :用於比較數組鍵名的回調函數。

3. 示例:結合使用array_map()array_diff_uassoc()

現在我們來看看一個實際的例子,如何先使用array_map()轉換數組的值,再使用array_diff_uassoc()進行比較。

假設我們有兩個數組,分別表示兩組產品的價格和名稱:

 $products1 = [
    101 => "Apple",
    102 => "Banana",
    103 => "Orange"
];

$products2 = [
    101 => "Apple",
    102 => "Grapes",
    104 => "Mango"
];

// 價格
$prices1 = [
    101 => 3,
    102 => 2,
    103 => 1
];

$prices2 = [
    101 => 3,
    102 => 2.5,
    104 => 1.5
];

假設我們希望將產品名稱轉換為大寫字母,並且使用array_diff_uassoc()比較兩個價格數組中價格不同且鍵名相同的元素。

 // 先將產品名稱轉換為大寫字母
$products1 = array_map('strtoupper', $products1);
$products2 = array_map('strtoupper', $products2);

// 使用 array_diff_uassoc 比较價格数组(鍵名相同,價格不同)
$price_diff = array_diff_uassoc($prices1, $prices2, function ($key1, $key2) {
    return $key1 - $key2;
});

print_r($price_diff);

4. 解釋代碼

  1. 我們使用array_map('strtoupper', $products1)array_map('strtoupper', $products2)來將產品名稱轉換為大寫字母。這樣我們可以確保名稱的比較不受大小寫影響。

  2. array_diff_uassoc()用來比較價格數組。我們提供了一個簡單的回調函數用於比較鍵名( $key1 - $key2 )。如果兩個數組的鍵名相同,但對應的價格不同, array_diff_uassoc()會返回這些元素。

5. 輸出結果

運行上述代碼時,我們會得到一個輸出:

 Array
(
    [102] => 2
    [104] => 1.5
)

在這個例子中,產品ID 102104的價格不同,因此它們被返回。

總結

本文介紹瞭如何結合使用PHP 中的array_map()array_diff_uassoc()函數。我們首先用array_map()轉換數組中的元素,再通過array_diff_uassoc()比較兩個數組中鍵名和對應值不同的元素。通過這種方式,我們能夠靈活地處理和比較數組,適應不同的需求。


尾部和文章內容分隔線