带参数的 PHP array_filter

2022-08-30 07:01:36

我有以下代码:

function lower_than_10($i) {
    return ($i < 10);
}

我可以用来过滤这样的数组:

$arr = array(7, 8, 9, 10, 11, 12, 13);
$new_arr = array_filter($arr, 'lower_than_10');

如何将参数添加到lower_than_10,以便它也接受要检查的数字?比如,如果我有这个:

function lower_than($i, $num) {
    return ($i < $num);
}

如何从array_filter通过10到$num或任何数字来称呼它?


答案 1

如果您使用的是 php 5.3 及更高版本,则可以使用闭包来简化代码:

$NUM = 5;
$items = array(1, 4, 5, 8, 0, 6);
$filteredItems = array_filter($items, function($elem) use($NUM){
    return $elem < $NUM;
});

答案 2

作为使用闭包@Charles解决方案的替代方法,您实际上可以在文档页面上的注释中找到示例。我们的想法是创建一个具有所需状态($num)和回调方法($i作为参数)的对象:

class LowerThanFilter {
        private $num;

        function __construct($num) {
                $this->num = $num;
        }

        function isLower($i) {
                return $i < $this->num;
        }
}

用法(演示):

$arr = array(7, 8, 9, 10, 11, 12, 13);
$matches = array_filter($arr, array(new LowerThanFilter(12), 'isLower'));
print_r($matches);

作为旁注,您现在可以用更通用的方法替换,例如 , 等。只是一个想法 - 和一个演示...LowerThanFilterNumericComparisonFilterisLowerisGreaterisEqual