我在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;
});
答案 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);
}