我正在为去年创建一个日期数组,并给出一个开始和结束日期,我将返回一组过滤日期。
我有一个问题,我不知道php版本或Laravel之间是否存在差异,但是我得到的错误是
只有变量才能在 234
行上通过引用传递
是
$result[array_pop(array_keys($result))][] = $val;
这是我的类函数,它给出了错误
public function filter(Request $request)
{
$time = new DateTime('now');
$now = $time->modify('first day of this month')->format('Y-m-d');
$last_year = $time->modify('-1 year')->format('Y-m-d');
// get a lost of dates fro past year
$all = $this->dateRange($last_year, $now);
foreach($request->dates as $date) {
// get date ranges of completed addresses
$range = $this->dateRange($date[0], $date[1]);
// return an array of unconfirmed dates for addresses
$all = array_diff($all, $range);
}
if(empty($all)) {
$time = new DateTime('now');
$now = $time->format('M Y');
$last_year = $time->modify('-1 year')->format('M Y');
$dates[] = array(
$last_year, $now
);
}
else {
$time = new DateTime('now');
$last_year = $time->modify('first day of this month')->modify('-1 year');
$result = array();
foreach ($all as $key => $val) {
if ($last_year->add(new DateInterval('P1D'))->format('Y-m-d') != $val) {
$result[] = array();
$last_year = new DateTime($val);
}
$result[array_pop(array_keys($result))][] = $val;
}
foreach($result as $array) {
$dates[] = array(
(new DateTime($array[0]))->format('M Y'), (new DateTime(end($array)))->format('M Y')
);
}
}
return response()->json($dates);
}
private function dateRange($start, $end)
{
$period = new DatePeriod(
new DateTime($start),
new DateInterval('P1D'),
new DateTime($end)
);
foreach($period as $key => $value) {
$range[] = $value->format('Y-m-d');
}
return $range;
}
这是在php7中运行的,如果我使用php5.6在普通的php文件中运行代码,我没有错误,输出正是我所期望的。
导致问题的原因是什么以及如何解决?
答案 0 :(得分:1)
您的问题与日期无关,但事实上array_pop
需要引用array_keys
未返回的数组。
您可以找到解释此here的另一个答案
问题是,该结束需要引用,因为它修改了数组的内部表示(即它使当前元素指针指向最后一个元素)。
爆炸的结果('。',$ file_name)无法转换为引用。这是PHP语言中的限制,可能出于简单原因而存在。
在您的情况下,array_keys
的结果是数组,而不是引用。
失败
$result[array_pop(array_keys($result))][] = $val;
失败
$poppedKey = array_pop(array_keys($result));
$result[$poppedKey][] = $val;
作品
$keys = array_keys($result);
$poppedKey = array_pop($keys);
$result[$poppedKey][] = $val;
作品
$keys = array_keys($result);
$result[array_pop($keys)][] = $val;