在開發過程中,我們經常會遇到白名單的情況,即需要允許某些項通過,並排除掉不在白名單中的項。在PHP 中,我們可以使用array_diff()函數來優雅地從白名單中排除指定項,提升代碼的簡潔性和可讀性。
array_diff()是一個非常有用的函數,它可以返回一個數組,該數組由原數組中的所有元素組成,但排除了與其他一個或多個數組中的元素相同的項。在白名單場景中,我們通常會利用array_diff()來從允許的項(白名單)中排除掉不需要的項。
假設我們有一個包含多個URL 的白名單數組,我們想從中排除一些特定的URL。
<?php
// 白名單數組
$whitelist = [
"http://m66.net/page1",
"http://m66.net/page2",
"http://m66.net/page3",
"http://m66.net/page4",
];
// 需要排除的 URL 數組
$excludeUrls = [
"http://m66.net/page2",
"http://m66.net/page4",
];
// 使用 array_diff() 排除指定的 URL
$filteredWhitelist = array_diff($whitelist, $excludeUrls);
// 輸出排除後的白名單
print_r($filteredWhitelist);
?>
輸出:
Array
(
[0] => http://m66.net/page1
[2] => http://m66.net/page3
)
定義白名單:我們首先定義了一個包含多個URL 的白名單數組$whitelist 。
排除的URL 數組:然後,我們定義了一個數組$excludeUrls ,其中包含我們希望排除的URL。
使用array_diff()排除指定項:通過調用array_diff()函數,我們可以從$whitelist中排除$excludeUrls中的所有URL,得到一個新的數組$filteredWhitelist ,這個數組就是我們排除後的白名單。
輸出結果:最後,我們使用print_r()函數輸出排除後的白名單。
使用array_diff()的最大優勢之一是它使代碼變得更加簡潔和易讀。假設你需要從一個較大的數組中排除多個項,手動逐一遍歷數組並排除元素會顯得非常繁瑣。而array_diff()通過簡單的一行代碼就能完成這個任務,讓你的代碼更易理解和維護。
array_diff()會根據值而非鍵來比較數組中的元素。因此,在處理鍵值對時,需要考慮是否需要保留鍵或者轉換為關聯數組。
array_diff()返回的是一個新的數組,原數組不會發生變化。如果需要原地修改數組,可以將結果重新賦值給原數組。