首页 > 解决方案 > 多个数组中的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
                )

        )

请帮助我找到解决方案,谢谢

标签: php

解决方案


我找到了解决方案

$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 沙箱 示例上运行它


推荐阅读