array_filter
(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
array_filter — 使用回撥函式過濾陣列的元素
說明
遍歷 array 陣列中的每個值,並將每個值傳遞給 callback 回撥函式。
如果 callback 回撥函式返回 true,則將 array 陣列中的當前值返回到結果 array 陣列中。
返回結果 array 陣列的鍵名(下標)會維持不變,如果 array 參數是索引陣列,返回的結果 array 陣列鍵名(下標)可能會不連續。
可以使用 array_values() 函式對陣列重新索引。
參數
-
array -
要遍歷的陣列
-
callback -
使用的回撥函式
如果沒有提供
callback回撥函式,將刪除陣列中array的所有「空」元素。 有關 PHP 如何判定「空」元素,請參閱 empty() 。 -
mode -
決定哪些參數發送到
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 = [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 參數時
<?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 參數時
<?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」目前陣列和裡面的元素),否則此函式的行為將不可預測。
參見
- array_intersect() - 計算陣列的交集
- array_map() - 為陣列的每個元素應用回撥函式
- array_reduce() - 用回撥函式迭代地將陣列簡化為單一的值
- array_walk() - 使用使用者自定義函式對陣列中的每個元素做回撥處理