Why is array_filter not working?

I need to use date () in $ var as follows:

$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);

I don’t understand why it returns an empty array, but when I write it like this, it works:

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

How can i fix this?

+4
source share
2 answers

Or you need to assign a variable function ($var) {and pass it to the array_filter, or you need to give your name functions function checkDate($var) {.

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

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

Or

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

$filtered = array_filter($array, $checkDate);
+3
source
$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

If you do not plan to reuse a function, you should name it inside the filter this way

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

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

Results match:

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

Source: https://habr.com/ru/post/1688324/


All Articles