Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel比较日期在php7上返回错误,但在php5.6上不返回错误_Php_Arrays_Laravel_Datetime - Fatal编程技术网

Laravel比较日期在php7上返回错误,但在php5.6上不返回错误

Laravel比较日期在php7上返回错误,但在php5.6上不返回错误,php,arrays,laravel,datetime,Php,Arrays,Laravel,Datetime,我正在为去年创建一个日期数组,给定开始日期和结束日期,我将返回一个过滤日期数组 我有一个问题,我不知道这是php版本之间的差异还是Laravel引起的骚动,但我得到的错误是 只有变量才能在第234行通过引用传递 那是 $result[array_pop(array_keys($result))][] = $val; 这是我的类函数,它给出了错误 public function filter(Request $request) { $time = new DateTime('now');

我正在为去年创建一个日期数组,给定开始日期和结束日期,我将返回一个过滤日期数组

我有一个问题,我不知道这是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文件中运行代码,我不会得到任何错误,并且输出正是我所期望的


问题的原因和解决方法?

您的问题与日期无关,但事实上,
array\u pop
需要对数组的引用,而
array\u key
不会返回该数组

你可以找到另一个解释这个的答案

问题是,该端需要引用,因为它修改数组的内部表示(即,它使当前元素指针指向最后一个元素)

分解(“.”,$file_name)的结果无法转换为引用。这是PHP语言中的一个限制,可能是出于简单的原因

在您的例子中,
array\u keys
的结果是一个数组,而不是一个引用

  • 失败

    $result[array_pop(array_keys($result))][] = $val;
    
    $poppedKey = array_pop(array_keys($result));
    $result[$poppedKey][] = $val;
    
  • 失败

    $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;
    
  • 工作

    $keys = array_keys($result);
    $poppedKey = array_pop($keys);
    $result[$poppedKey][] = $val;
    
    $keys = array_keys($result);
    $result[array_pop($keys)][] = $val;
    

  • 我不知道你想在这里做什么,但最好使用Carbon library@Thamerbelfkih,这个错误与此无关DateTime@JimWright我说Carbon,也许他能找到一些东西来帮助他弄清楚他想做什么,Carbon it是DateTime php的扩展Class@Thamerbelfkih我知道,但这个错误与日期无关,并且已经发布了答案。