为什么array_filter不工作?

时间:2017-10-28 00:09:07

标签: php arrays

我需要在$ var中使用date(),如下所示:

$array = array(1 => '2017-10-05', 'February', 'March');

function month($var) {
$date = date('Y-m'); 

return (stripos($var, $date) !== false); 
}

$filtered = array_filter($array, 'month');

var_dump($filtered);

我不明白为什么它返回一个空数组 但是当我这样写的时候,就可以了:

$array = array(1 => '2017-10-05', 'February', 'March');
print_r(array_filter($array, function ($var) { return (stripos($var, '2017-10') !== false); }));

我该如何解决?

2 个答案:

答案 0 :(得分:3)

您需要将function ($var) {分配给变量并将其传递给array_filter,或者您需要为您的函数命名:function checkDate($var) {

function checkDate($var) {
    $date = date('Y-m'); 
    return (stripos($var, $date) !== false); 
}

$filtered = array_filter($array, 'checkDate');

$checkDate = function ($var) {
    $date = date('Y-m'); 
    return (stripos($var, $date) !== false); 
}

$filtered = array_filter($array, $checkDate);

答案 1 :(得分:2)

$array = array(1=> '2017-10-05', 'February', 'March');

function date_func($var){
  return (stripos($var, date('Y-m')) !== false); 
}

var_dump(array_filter($array, 'date_func'));

https://eval.in/888623

如果您不打算重复使用该功能,您应该在过滤器中调用它,如此

$array = array(1=> '2017-10-05', 'February', 'March');

$filtered = array_filter($array, function($v){
    return (stripos($v, date('Y-m')) !== false); 
});

结果是一样的:

Array
(
    [1] => 2017-10-05
)