<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>