array_filter

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

array_filter使用回調函數過濾數組的元素

說明

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

遍歷 array 數組中的每個值,并將每個值傳遞給 callback 回調函數。 如果 callback 回調函數返回 true,則將 array 數組中的當前值返回到結果 array 數組中。

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

參數

array

要遍歷的數組

callback

使用的回調函數

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

mode

決定哪些參數發(fā)送到 callback 回調的標志:

  • ARRAY_FILTER_USE_KEY - 將鍵名作為 callback 回調的唯一參數,而不是值
  • ARRAY_FILTER_USE_BOTH - 將值和鍵都作為參數傳遞給 callback 回調,而不是僅傳遞值
默認值為 0 ,只傳遞值作為 callback 回調的唯一參數。

返回值

返回過濾后的數組。

更新日志

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

范例

示例 #1 array_filter() 示例

<?php
function odd($var)
{
    
// 返回輸入整數是否為奇數(單數)
    
return $var 1;
}
function 
even($var)
{
    
// 返回輸入整數是否為偶數
    
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 參數時

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

以上例程會輸出:

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

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

<?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)
}

注釋

警告

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

參見