array_filter

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

array_filter使用回調(diào)函數(shù)過濾數(shù)組的元素

說明

array_filter(array $array, ?callable $callback = null, int $mode = 0): array

遍歷 array 數(shù)組中的每個(gè)值,并將每個(gè)值傳遞給 callback 回調(diào)函數(shù)。 如果 callback 回調(diào)函數(shù)返回 true,則將 array 數(shù)組中的當(dāng)前值返回到結(jié)果 array 數(shù)組中。

返回結(jié)果 array 數(shù)組的鍵名(下標(biāo))會維持不變,如果 array 參數(shù)是索引數(shù)組,返回的結(jié)果 array 數(shù)組鍵名(下標(biāo))可能會不連續(xù)。 可以使用 array_values() 函數(shù)對數(shù)組重新索引。

參數(shù)

array

要遍歷的數(shù)組

callback

使用的回調(diào)函數(shù)

如果沒有提供 callback 回調(diào)函數(shù),將刪除數(shù)組中 array 的所有“空”元素。 有關(guān) PHP 如何判定“空”元素,請參閱 empty() 。

mode

決定哪些參數(shù)發(fā)送到 callback 回調(diào)的標(biāo)志:

  • ARRAY_FILTER_USE_KEY - 將鍵名作為 callback 回調(diào)的唯一參數(shù),而不是值
  • ARRAY_FILTER_USE_BOTH - 將值和鍵都作為參數(shù)傳遞給 callback 回調(diào),而不是僅傳遞值
默認(rèn)值為 0 ,只傳遞值作為 callback 回調(diào)的唯一參數(shù)。

返回值

返回過濾后的數(shù)組。

更新日志

版本 說明
8.0.0 callback 現(xiàn)在可為空(nullable)。
8.0.0 如果 callback 接受引用傳遞參數(shù),該方法將會拋出 E_WARNING

范例

示例 #1 array_filter() 示例

<?php
function odd($var)
{
    
// 返回輸入整數(shù)是否為奇數(shù)(單數(shù))
    
return $var 1;
}
function 
even($var)
{
    
// 返回輸入整數(shù)是否為偶數(shù)
    
return !($var 1);
}
$array1 = ['a' => 1'b' => 2'c' => 3'd' => 4'e' => 5];
$array2 = [6789101112];
echo 
"Odd :\n";
print_r(array_filter($array1"odd"));
echo 
"Even:\n";
print_r(array_filter($array2"even"));
?>

以上例程會輸出:

Odd :
Array
(
    [a] => 1
    [c] => 3
    [e] => 5
)
Even:
Array
(
    [0] => 6
    [2] => 8
    [4] => 10
    [6] => 12
)

示例 #2 array_filter() 不使用 callback 參數(shù)時(shí)

<?php
$entry 
= [
    
=> 'foo',
    
=> false,
    
=> -1,
    
=> null,
    
=> '',
    
=> '0',
    
=> 0,
];
print_r(array_filter($entry));
?>

以上例程會輸出:

Array
(
    [0] => foo
    [2] => -1
)

示例 #3 array_filter() 不使用 mode 參數(shù)時(shí)

<?php
$arr 
= ['a' => 1'b' => 2'c' => 3'd' => 4];
var_dump(array_filter($arr, function($k) {
    return 
$k == 'b';
}, 
ARRAY_FILTER_USE_KEY));
var_dump(array_filter($arr, function($v$k) {
    return 
$k == 'b' || $v == 4;
}, 
ARRAY_FILTER_USE_BOTH));
?>

以上例程會輸出:

array(1) {
  ["b"]=>
  int(2)
}
array(2) {
  ["b"]=>
  int(2)
  ["d"]=>
  int(4)
}

注釋

警告

不應(yīng)該在回調(diào)函數(shù)中改變數(shù)組(如:添加、刪除或銷毀“unset”當(dāng)前數(shù)組和里面的元素),否則此函數(shù)的行為將不可預(yù)測。

參見

  • array_intersect() - 計(jì)算數(shù)組的交集
  • array_map() - 為數(shù)組的每個(gè)元素應(yīng)用回調(diào)函數(shù)
  • array_reduce() - 用回調(diào)函數(shù)迭代地將數(shù)組簡化為單一的值
  • array_walk() - 使用用戶自定義函數(shù)對數(shù)組中的每個(gè)元素做回調(diào)處理