php - 多个数组中的PHP联合开始时间和结束时间
问题描述
我有一个数组,我想联合开始时间和结束时间,如果时间是联合得到最小的开始时间和最大的结束时间。如果时间不是工会保留它。
[Wednesday] => Array
(
[0] => Array
(
[startTime] => 09:00
[endTime] => 18:00
)
[1] => Array
(
[startTime] => 10:00
[endTime] => 19:00
)
[2] => Array
(
[startTime] => 5:00
[endTime] => 6:00
)
[3] => Array
(
[startTime] => 4:00
[endTime] => 7:00
)
[4] => Array
(
[startTime] => 12:00
[endTime] => 18:00
)
[5] => Array
(
[startTime] => 11:00
[endTime] => 21:00
)
[6] => Array
(
[startTime] => 8:00
[endTime] => 19:00
)
)
我想用 PHP 得到一个这样的数组
[Wednesday] => Array
(
[0] => Array
(
[startTime] => 8:00
[endTime] => 21:00
)
[1] => Array
(
[startTime] => 4:00
[endTime] => 7:00
)
)
请帮助我找到解决方案,谢谢
解决方案
我找到了解决方案
$array = array(
array('starttime' => '09:00' , 'endtime' => '18:00') ,
array('starttime' => '10:00' , 'endtime' => '19:00') ,
array('starttime' => '05:00' , 'endtime' => '06:00') ,
array('starttime' => '04:00' , 'endtime' => '07:00') ,
array('starttime' => '12:00' , 'endtime' => '18:00') ,
array('starttime' => '11:00' , 'endtime' => '21:00') ,
array('starttime' => '08:00' , 'endtime' => '19:00') ,
);
usort($array, function($a, $b) {
return $a['starttime'] > $b['starttime'];
});
foreach($array as $index => &$row){
if(isset($array[$index-1])){
$prev = $array[$index-1];
if($row['starttime'] <= $prev['starttime'] && $row['endtime'] >= $prev['endtime']){
unset($array[$index-1]);
} else if ($row['starttime'] >= $prev['starttime'] && $row['endtime'] <= $prev['endtime'] && $prev['endtime'] >= $row['starttime']) {
$row['starttime'] = $prev['starttime'];
$row['endtime'] = $prev['endtime'];
unset($array[$index-1]);
} else if ($row['starttime'] <= $prev['starttime'] && $row['endtime'] <= $prev['endtime'] && $prev['endtime'] >= $row['starttime']) {
$row['endtime'] = $prev['endtime'];
unset($array[$index-1]);
} else if ($row['starttime'] >= $prev['starttime'] && $row['endtime'] >= $prev['endtime'] && $prev['endtime'] >= $row['starttime']) {
$row['starttime'] = $prev['starttime'];
unset($array[$index-1]);
} else if ($row['starttime'] >= $prev['starttime'] && $row['endtime'] <= $prev['endtime'] && $prev['endtime'] >= $row['starttime']) {
$row['starttime'] = $prev['starttime'];
unset($array[$index-1]);
}
}
}
print_r($array);
在 php 沙箱 示例上运行它
推荐阅读
- vba - 检查变量中是否存在特定值
- python - 递归删除S3存储桶下的文件而不使用python删除文件夹
- vhdl - 如何在vhdl中找到两个向量的点积?
- mongodb - 切换/使用
在 MongoDB 外壳中 - php - 对数组中的值进行分组
- javascript - 为什么即使 Observables 是惰性的,promise 的渲染速度也比 observable 慢,而 promises 不是
- python - 如何使用 python 获取带有 xml.tree 的元素?
- coq - 转换引理,在 Coq 上留下之前的状态
- c# - 按位置创建唯一列表c#
- php - 如何检查 Laravel 的内部?