使用php end的数组分配无法按预期工作

使用php end的数组分配无法按预期工作,php,Php,如果我有一个数组: [ start => 2018-01-01 12:00 end => 2018-01-01 15:00 ], [ start => 2018-01-01 12:00 end => 2018-01-01 17:00 ], 这个数组可以有任意数量的开始和结束日期,我需要按开始和结束时间过滤每天。Ie,2018-01-01可能有5个条目具有不同的开始和结束时间 我需要以一个具有较早开始时间和最晚结束时间的阵列结束: [

如果我有一个数组:

[
   start => 2018-01-01 12:00
   end   => 2018-01-01 15:00
],
[
   start => 2018-01-01 12:00
   end   => 2018-01-01 17:00
],
这个数组可以有任意数量的开始和结束日期,我需要按开始和结束时间过滤每天。Ie,2018-01-01可能有5个条目具有不同的开始和结束时间

我需要以一个具有较早开始时间和最晚结束时间的阵列结束:

[
   start => 2018-01-01 12:00
   end   => 2018-01-01 17:00
]
在我的循环中,我比较结束时间,如果第二个时间大于第一个时间,我想将end的值替换为这个新值:

$newArr[] = $dates[0];

foreach($dates as $date) {
    if ($date['end'] > end($newArr)['end'] {
       end($newArr)['end'] = $date['end']
    }
}
由于某些原因,此分配实际上不起作用-它保持初始设置end=>15:00


希望这是清楚的:

在进行比较之前,您可能希望尝试将datetime转换为时间戳

$timestamp['end']=strottime$date['end']

问题是,该端返回的是一个值,而不是一个引用。 通过手动指向最后一个索引,它将按预期工作:

$newArr[] = $dates[0];

foreach($dates as $date) {
    if ($date['end'] > $newArr[max(array_keys($newArr))]['end']) {
       $newArr[max(array_keys($newArr))]['end'] = $date['end'];
    }
}

echo "<pre>";       
var_dump($newArr);
echo "</pre>";
工作代码段:

由于结果中只需要一个元素,因此没有理由在任何位置使用end:


另外,您当前的代码只检查并添加end not start。

我想synax错误只出现在这段代码中,而不出现在原始代码中?为什么还要使用end函数?是否启用了错误报告功能?修复语法并将end$newArr替换为$newArr您不需要end$newArr。如果您使用$newArr[0]['end']它就起作用了。问题是,该端返回的是值,而不是引用。如果键更改为unset或其他内容,则使用count或sizeof-1的解决方案将破坏代码。
$newArr[] = $dates[0];

foreach($dates as $date) {
    if ($date['end'] > $newArr[0]['end']) {
       $newArr[0]['end'] = $date['end'];
    }
    if ($date['start'] < $newArr[0]['start']) {
       $newArr[0]['start'] = $date['start'];
    }
}