(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
array_filter — 使用回調(diào)函數(shù)過濾數(shù)組的元素
遍歷 array
數(shù)組中的每個值,并將每個值傳遞給 callback
回調(diào)函數(shù)。
如果 callback
回調(diào)函數(shù)返回 true
,則將 array
數(shù)組中的當前值返回到結(jié)果 array 數(shù)組中。
返回結(jié)果 array 數(shù)組的鍵名(下標)會維持不變,如果 array
參數(shù)是索引數(shù)組,返回的結(jié)果 array 數(shù)組鍵名(下標)可能會不連續(xù)。
可以使用 array_values() 函數(shù)對數(shù)組重新索引。
array
要遍歷的數(shù)組
callback
使用的回調(diào)函數(shù)
如果沒有提供 callback
回調(diào)函數(shù),將刪除數(shù)組中 array
的所有“空”元素。
有關(guān) PHP 如何判定“空”元素,請參閱 empty() 。
mode
決定哪些參數(shù)發(fā)送到 callback
回調(diào)的標志:
ARRAY_FILTER_USE_KEY
- 將鍵名作為 callback
回調(diào)的唯一參數(shù),而不是值
ARRAY_FILTER_USE_BOTH
- 將值和鍵都作為參數(shù)傳遞給 callback
回調(diào),而不是僅傳遞值
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 = [6, 7, 8, 9, 10, 11, 12];
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ù)時
<?php
$entry = [
0 => 'foo',
1 => false,
2 => -1,
3 => null,
4 => '',
5 => '0',
6 => 0,
];
print_r(array_filter($entry));
?>
以上例程會輸出:
Array ( [0] => foo [2] => -1 )
示例 #3 array_filter() 不使用 mode
參數(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”當前數(shù)組和里面的元素),否則此函數(shù)的行為將不可預(yù)測。