當前位置: 首頁> 最新文章列表> array_flip() + array_diff_key() 實現差集操作

array_flip() + array_diff_key() 實現差集操作

M66 2025-05-18

在PHP 中,處理數組差集的方式有很多種。除了常見的array_diff()函數以外,還可以藉助array_flip()array_diff_key()函數,通過“鍵”的方式實現靈活的差集計算。尤其在處理兩個數組之間的“鍵值匹配差異”時,這種方式顯得非常高效而實用。

一、基本概念回顧

1. array_flip()

array_flip()會將數組的鍵和值進行互換。這意味著原本的值會變成鍵,而鍵會變成值。

 $input = ['apple' => 'red', 'banana' => 'yellow'];
$result = array_flip($input);

// 輸出:['red' => 'apple', 'yellow' => 'banana']

注意事項:如果原數組中有重複的值, array_flip()會丟棄重複項,只保留最後一個。

2. array_diff_key()

array_diff_key()用於比較兩個或多個數組的鍵,並返回存在於第一個數組中、但不出現在其他數組中的鍵值對

 $array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['b' => 99];

$result = array_diff_key($array1, $array2);

// 輸出:['a' => 1, 'c' => 3]

二、使用array_flip + array_diff_key 實現“值差集”

假設我們有兩個數組,想找出第一個數組中獨有的值(即差集),這時候我們可以巧妙地利用array_flip()array_diff_key()組合來實現。

示例代碼:

 $groupA = ['apple', 'banana', 'cherry'];
$groupB = ['banana', 'grape'];

// 將值轉換為鍵
$flippedA = array_flip($groupA);
$flippedB = array_flip($groupB);

// 不同之處操作(通過 key 不同之處)
$diff = array_diff_key($flippedA, $flippedB);

// 結果還原成普通值數組
$uniqueToA = array_keys($diff);

print_r($uniqueToA);

輸出結果:

 Array
(
    [0] => apple
    [1] => cherry
)

我們成功找出了$groupA中有,但$groupB中沒有的值。

三、應用場景舉例

這種方法在以下場景中非常適用:

  • 快速找出兩個標籤數組的差異;

  • 用戶權限篩選(找出用戶有權限但模塊未使用的功能);

  • 表單多選項對比差異等。

比如你正在開發一個用戶權限系統,當前用戶的權限為:

 $userPermissions = ['edit', 'delete', 'create'];

而某模塊支持的操作為:

 $moduleSupports = ['edit', 'create'];

你可以用相同方式找出用戶擁有但模塊不支持的權限:

 $diff = array_keys(array_diff_key(
    array_flip($userPermissions),
    array_flip($moduleSupports)
));

// 輸出 ['delete']

四、總結

雖然PHP 提供了array_diff()直接用於求值的差集,但在某些更精細的場景中(如值唯一時),借助array_flip()array_diff_key()的組合不僅高效,還能提供更多靈活的操作方式。

這類技巧尤其在處理大數組或者需要對比操作符時,能帶來更高性能。