<html >
<title></title>
<body>
<div>
 
<?php
     /**
     * 获取到两个重合时段的最大和最小
     * [get_min_max description]
     * @author jimswoo 20161016 <[<email address>]> 
     * @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 <[<email address>]> 
     * @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 <[<email address>]> 
     * [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 <[<email address>]> 
     * @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 <[<email address>]> 
     * @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);
?>
</div>
</body>
</html>