PHP关于时间的时段的重合、 整合的方法
admin
2023-06-21 02:21:48
0

 

     /**

     * 获取到两个重合时段的最大和最小

     * [get_min_max description]

     * @author jimswoo 20161016 <[]> 

     * @param  [type] $a [description]

     * @param  [type] $b [description]

     * @return [type]    [description]

     */

     function get_min_max($a,$b){

        $sort = array_merge($a,$b);

        array_multisort($sort);

        $end = array_pop($sort);

        return $sort[0].'#'.$end;//array($sort[0],$end);

    }


    /**

     * [is_repeat description]

     * 是否两个时段重合

     * @author jimswoo 20161016 <[]> 

     * @param  [type]  $target  [description]

     * @param  [type]  $compare [description]

     * @param  boolean $run     [description]

     * @return boolean          [description]

     */

     function is_repeat($target,$compare,$run = true){

        $min = $compare[0];

        $max = $compare[1];

        $res = false;

        foreach($target as $v){

            if(($v >= $min && $v <= $max)) {

                $res = true;

                break;

            }

        }

        if($run && !$res){

          $res = is_repeat($compare,$target,false);

        }

        return $res;

    }


    /**

     * 把时段的值从字符串转为数组

     * @author jimswoo 20161016 <[]> 

     * [changeValue description]

     * @param  [type] $val [description]

     * @return [type]      [description]

     */

     function changeValue($val){

        $val = array_unique($val);

        $list = array();

        foreach($val as $v){

            $list[] = explode('#',$v);

        }

        return $list;

    }


    /**

     * [main_run description]

     * 比较方法

     * @author jimswoo 20161016 <[]> 

     * @param  [type] $all [description]

     * @return [type]      [description]

     */

     function main_run($all){

        $leng = count($all);

        $result = $un = array();

        $count = 0;

       for($i = 0;$i<$leng;$i++){

        for($j = $leng - 1;$j >= $i;$j--){

            if(is_repeat($all[$j],$all[$i])){

                if($j != $i){

                    $count++;

                }else{

                    $un[] = $all[$i][0].'#'.$all[$i][1];

                }

                $result[] = get_min_max($all[$j],$all[$i]);

                $all[$i] = $all[$j] = array(-3,-2);

                

            }else{

                $un[] = $all[$i][0].'#'.$all[$i][1];

            }

         }

          

        }

      

        $result = array_merge($result,$un);

      

        if($count == 0){

           $result = $all;

        }

        return array('c'=>$count,'v'=>$result);

    }


    /**

     * [getComfirmTimes description]

     * @author jimswoo 20161016 <[]> 

     * @param  [type] $all [description] 格式array(array(2,4),array(34,332))

     * @return [type]      [description]

     */

     function getComfirmTimes($all){

        if(empty($all)){

            return array();

        }

        $c=0;

        do{

          $is_end = main_run($all);

          if($is_end['c'] != 0){

              //var_dump($all);

              $all = changeValue($is_end['v']);

              

          }else{

             

              foreach($all as $k=>$v){

                  if($v[0] == -3){

                      unset($all[$k]);

                  }

              }

          }

          $c++;

        }while($is_end['c'] != 0 && $c < 120);

        return $all;

    }


    $test = array(

    array(2,6),

    array(5,9),

    array(10,11),

    array(15,20),

    array(22,23),

    array(13,19)

    );

    $res = getComfirmTimes($test);

    print_r($res);

?>


相关内容

热门资讯

致命管教:一桩熟人社会里的“生... 又是一起“管教“致死案。在甘肃嘉峪关,14岁男孩小超的生命终结在了一场以“心理疏导”为名的暴行中。与...
创维电视断电引起跳闸 电视机自动断电,表示电视机的电源部分电路进入了过载保护状态,是后级电路部分有元件击穿导致,在电视机使...
电饭锅短路引起跳闸怎么修 先去掉短路烧糊的痕迹,然后用胶布包裹重新固定线路然后再测试。然后再用万用表等查看是什么原因导致的跳闸...
冰箱漏电跳闸是什么原因引起的呢 比较常见的原因就是感应漏电,当冷藏柜启动之后,若柜内降温及控制部件均正常,外壳出现漏电现象,就说明冷...
“不舒服”的顶流男星,真的太敏... 你听过“不舒服文学”吗?想想上周日晚的自己,“当时以为是我敏感了,看了这几天大家的分析,我想说当时确...
马桶坐垫坏了怎么换盖怎么安装 马桶坐垫坏了怎么换盖怎么安装:一般马桶垫是与马桶盖连接在一起的,所以只需要找到固定马桶盖的螺丝,用螺...
空调怎么安装-中央空调规范安装... 空调远近驰名,许多人一说到空调第一反映就是空调,因其性能优良、品质优秀、性价比高,在空调界有着不可动...
谁的脸都可能被“偷”!AI短剧... 莫名成为反派角色,“被出演”AI短剧……近期,从知名演员到一般公众,多人发布维权声明,控诉肖像被AI...
加沙民众为遇袭身亡的哈马斯军事... 5月27日,民众在加沙城为遭以军空袭身亡的哈马斯军事领导人穆罕默德·奥达及其家人送葬。新华社发(里泽...
10名季节性零工,没有渡过那座... 露出水面的肯任屯漫水桥。除标注,本文图均为澎湃新闻记者葛明宁拍摄那两天,广西环江县洛阳镇永权村肯任屯...