使用回撥函式過濾陣列的元素

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 陣列鍵名(下標)可能會不連續。 可以使用 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 = [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」目前陣列和裡面的元素),否則此函式的行為將不可預測。

參見

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *