在開發過程中,我們經常會遇到需要比較兩個或多個數組的情況,特別是找出某個數組中獨有的元素。 PHP 提供了一個非常實用的內建函數—— array_diff() ,可以輕鬆完成這一任務。
array_diff()是PHP 中用於比較數組差異的函數。它會返回一個數組,該數組包含了只出現在第一個數組中的元素,而不會返回存在於後面數組中的任何值。
array array_diff(array $array1, array ...$arrays)
$array1是你要比較的主數組。
$arrays是你要和主數組進行比較的一個或多個數組。
假設我們記錄了用戶原有的興趣,以及用戶提交的新興趣列表,想要知道哪些是新增的。
<?php
$originalInterests = ['音樂', '電影', '旅行'];
$newInterests = ['音樂', '電影', '旅行', '攝影', '閱讀'];
$addedInterests = array_diff($newInterests, $originalInterests);
print_r($addedInterests);
?>
輸出:
Array
(
[3] => 攝影
[4] => 閱讀
)
可以看到, array_diff()返回了只出現在$newInterests中的元素,也就是用戶新增的興趣。
假設你在處理一個用戶提交的網站列表時,想要過濾掉用戶已經提交過的網址,只留下新的。
<?php
$existingUrls = [
'https://m66.net/article/123',
'https://m66.net/blog/2024',
];
$submittedUrls = [
'https://m66.net/article/123',
'https://m66.net/tools/checker',
'https://m66.net/blog/2024',
'https://m66.net/contact',
];
$newUrls = array_diff($submittedUrls, $existingUrls);
print_r($newUrls);
?>
輸出:
Array
(
[1] => https://m66.net/tools/checker
[3] => https://m66.net/contact
)
結果表明,用戶提交的這兩個網址是新的,沒有在原始列表中出現過。
array_diff()是通過值進行比較的,而且是使用非嚴格模式(不比較數據類型),比如'1'和1被認為是相同的。
如果需要使用嚴格比較(也就是連數據類型都要比較),可以使用array_diff_assoc()或array_diff_key() 。
返回結果保持了原數組中的鍵名,如果你不需要鍵名,可以用array_values()重新索引。
$cleanList = array_values(array_diff($newUrls, $existingUrls));
array_diff()是一個非常強大的工具,適用於數據篩選、日誌對比、用戶行為分析等多種場景。只要理解了它的工作方式,很多數組處理的邏輯都能變得簡單而高效。
希望這篇文章能幫助你更好地理解並使用array_diff() !如果你在開發中遇到類似的問題,不妨試試這個函數,也許就能節省你大量的代碼量。