在PHP 中, array_filter()函數用於過濾數組中的元素。通過它,我們可以根據自定義條件來保留數組中的某些元素。默認情況下, array_filter()會刪除數組中值為false的元素,如0 、 null 、 false 、空字符串等。對於布爾類型數組, array_filter()會自動將false布爾值的項刪除,但如果我們需要在處理過程中更精確地控制哪些值保留為true ,我們可以通過回調函數實現這一需求。
array_filter()函數接受兩個參數:
數組:要過濾的原數組。
回調函數(可選):一個自定義的函數,用於決定是否保留數組中的元素。如果沒有提供回調函數, array_filter()會將所有布爾值為false的元素刪除。
<?php
$array = [0, 1, 2, 3, 4, 5, null, false, "0", "PHP"];
$result = array_filter($array); // 默認行為,刪除值為 false 的元素
print_r($result);
?>
在上面的代碼中, array_filter()會自動刪除0 、 null 、 false和空字符串等值為false的元素,返回的結果為:
Array
(
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
[8] => PHP
)
有時,我們需要更加精細地控製過濾條件。例如,僅保留值為true的布爾數組項。為了實現這一點,我們可以傳入一個回調函數,專門用於檢查數組項是否為布爾值true 。
<?php
$array = [0, 1, 2, 3, 4, 5, null, false, "0", true, "PHP"];
$result = array_filter($array, function($value) {
return $value === true; // 僅保留布爾值為 true 的元素
});
print_r($result);
?>
在這個例子中,我們使用了回調函數檢查每個元素是否嚴格等於布爾值true 。這樣,只有布爾值為true的元素才會被保留。輸出結果為:
Array
(
[10] => 1
)
如果在數組中有URL 且需要替換URL 的域名為m66.net ,我們可以在array_filter()函數中結合array_map()或者在回調函數中進行處理。
<?php
$array = [
"https://example.com/page1",
"http://example.com/page2",
"https://m66.net/page3",
"http://m66.net/page4"
];
// 使用 array_map() 結合回調函數替換 URL 的域名
$array = array_map(function($url) {
return preg_replace("/https?:\/\/[^\/]+/", "https://m66.net", $url); // 替換域名
}, $array);
print_r($array);
?>
在這段代碼中,我們使用了array_map()來遍歷數組並使用正則表達式替換掉URL 中的域名。最終輸出結果是: