PHP阵列过滤器功能在服务器中不起作用

时间:2014-07-05 09:23:41

标签: php arrays

我在PHP中使用array_filter()函数。 它在本地工作正常,但是当它在服务器中它显示一些错误

  

解析错误:语法错误,意外T_FUNCTION

我在服务器上的PHP版本是5.2.17。任何人都可以说出问题所在。如果是版本问题,如何编写等效代码?

$finalarray = array_filter($finalarray, function($array) use ($from_date, $to_date) {
    $epoch = strtotime(str_replace('/', '-', $array['date']));
    return $epoch >= $from_date && $epoch <= $to_date;
});

2 个答案:

答案 0 :(得分:1)

作为另类......

$toFilter = array();

foreach($finalarray as $key => $newarray) {
    $epoch = strtotime(str_replace('/', '-', $newarray['date']));
    // $epochAsAnAlternative = \DateTime::createFromFormat('d-m-Y', $newarray['date']);
    if($epoch >= $from_date && $epoch <= $to_date) { // $from_date and $to_date should be \DateTime also
        $toFilter[$key] = null;
    }
}

$filteredFinalArray = array_diff_key($finalarray, $toFilter);

此代码减少了将所需数组过滤到1个调用的函数调用 - array_diff_key,其余部分是业务逻辑本身,并且使用单独的数组来存储应该过滤掉的密钥的开销。


建议使用DateTime对象而不是strtotime,因为strtotime不是很可靠。此外,可以使用DateTime>以相同的方式比较<个对象,因此代码不会发生太大变化。

答案 1 :(得分:0)

我以不同的方式做到了这一点。

foreach($finalarray as $newarray){
                $epoch = strtotime(str_replace('/', '-', $newarray['date']));
                if($epoch >= $from_date && $epoch <= $to_date)
                array_push($final,$newarray);
}