PHP - Ds Set filter() 函数



PHP 的 Ds\Set::filter() 函数用于通过可调用对象来创建一个新的集合,该可调用对象决定了哪些值应该包含在新创建的集合中。

可调用函数是一个可选参数,它对于应该包含在集合中的值返回 true,对于不应该包含的值返回 false

语法

以下是 PHP Ds\Set::filter() 函数的语法:

public Ds\Set::filter(callable $callback = ?): Ds\Set

参数

此函数接受一个名为“回调”函数的单个参数,如下所述:

  • callback − 一个可选的回调函数,如果值应该包含则返回 true;否则返回 'false'。

以下是可调用函数的语法:

callback(mixed $value): bool

返回值

此函数返回一个新集合,其中包含所有回调函数返回 true 的值,或者如果没有提供回调函数则包含所有转换为 true 的值。

示例 1

以下是 PHP Ds\Set::filter() 函数的基本示例。

<?php
   $set = new \Ds\Set([1,2,3,4,5,6,7,8,9]);
   echo "The original set elements: \n";
   print_r($set);
   echo "The elements after the filter() function is invoked : \n";
   print_r($set->filter(function($value) {
      return ($value+3)%2 == 0;
   }));
?>

输出

以上程序产生以下输出:

The original set elements:
Ds\Set Object
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
)
The elements after the filter() function is invoked :
Ds\Set Object
(
    [0] => 1
    [1] => 3
    [2] => 5
    [3] => 7
    [4] => 9
)

示例 2

以下是 PHP Ds\Set::filter() 函数的另一个示例。我们使用此函数使用一个可调用函数创建一个新集合,该函数返回 11 的倍数的值。

<?php
   $set = new \Ds\Set([74, 99, 177, 66, 198, 121, 154]);
   echo "The original set elements: \n";
   print_r($set);
   echo "The elements which are divisbile by 11 are: \n";
   print_r($set->filter(function($value) {
      return $value%11 == 0;
   }));
?>

输出

执行上述程序后,将产生以下输出:

The original set elements:
Ds\Set Object
(
    [0] => 74
    [1] => 99
    [2] => 177
    [3] => 66
    [4] => 198
    [5] => 121
    [6] => 154
)
The elements which are divisbile by 11 are:
Ds\Set Object
(
    [0] => 99
    [1] => 66
    [2] => 198
    [3] => 121
    [4] => 154
)

示例 3

在下面的示例中,我们使用 PHP Ds\Set::filter() 函数创建一个新集合,其中仅包含小于 50 的值。回调函数对于当前集合 ([1, 5, 10, 15, 20]) 中的值返回 true,其中与 3 的乘积小于 50。

<?php
   $set = new \Ds\Set([1, 5, 10, 15, 20]);
   echo "The original set elements: \n";
   print_r($set);
   echo "The elements after applying the filter() function are: \n";
   print_r($set->filter(function($value) {
      return $value*3<50;
   }));
?>

输出

执行上述程序后,将生成以下输出:

The original set elements:
Ds\Set Object
(
    [0] => 1
    [1] => 5
    [2] => 10
    [3] => 15
    [4] => 20
)
The elements after applying the filter() function are:
Ds\Set Object
(
    [0] => 1
    [1] => 5
    [2] => 10
    [3] => 15
)

示例 4

如果可调用函数对于当前集合的每个值都返回 'false',则新创建的集合中将不包含任何值。

<?php
   $set = new \Ds\Set([1, 5, 10, 15, 20]);
   echo "The original set elements: \n";
   print_r($set);
   echo "The elements after applying the filter() function are: \n";
   print_r($set->filter(function($value) {
      return $value+($value+1) == 42;
   }));
?>

输出

执行上述程序后,将显示以下输出:

The original set elements:
Ds\Set Object
(
    [0] => 1
    [1] => 5
    [2] => 10
    [3] => 15
    [4] => 20
)
The elements after applying the filter() function are:
Ds\Set Object
(
)
php_function_reference.htm
广告