php对比时间冲突,获取存在交集和子集算法

有n个直播课程,其中有不同数量的场次,判断不同直播课场次下发生时间上交叉或者包含的,如何处理效率更快?其中,场次个数多个,直播课程多个。

最后变成的数组为 冲突的在上面,不冲突的场次在下面

原始数据:

$res=[

'直播课程A'=>[

'直播课程A_场次1'=>[

'startTime'=> '2020-06-01 19:20:00',

'endTime' => '2020-06-01 19:40:00'

],

'直播课程A_场次2'=>[

'startTime'=> '2020-06-02 19:20:00',

'endTime' => '2020-06-02 19:40:00'

],

],

'直播课程B'=>[

'直播课程B_场次1'=>[

'startTime'=> '2020-06-01 19:21:00',

'endTime' => '2020-06-01 19:39:00'

],

'直播课程B_场次2'=>[

'startTime'=> '2020-06-02 19:20:00',

'endTime' => '2020-06-02 19:40:00'

],

],

'直播课程C'=>[

'直播课程C_场次1'=>[

'startTime'=> '2020-06-01 19:19:00',

'endTime' => '2020-06-01 19:45:00'

],

'直播课程C_场次2'=>[

'startTime'=> '2020-06-02 19:20:00',

'endTime' => '2020-06-02 20:40:00'

],

],

'直播课程D'=>[

'直播课程D_场次1'=>[

'startTime'=> '2020-06-01 18:20:00',

'endTime' => '2020-06-01 19:20:00'

],

'直播课程D_场次2'=>[

'startTime'=> '2020-06-02 18:20:00',

'endTime' => '2020-06-02 19:39:00'

],

],

];

回答

感觉你这个问题没有描述清楚,比如 直播课程C_场次2和直播课程D_场次2就是冲突的,你这里却当做不冲突。

下面是我的找出冲突课程的代码,不冲突的你自己处理一下

$temp =[];

foreach($res as $val){

$temp = array_merge($temp, $val);

}

uasort($temp, function($a, $b){

if($a['startTime']==$b['startTime']){

return ($a['endTime']<=$b['endTime'])?-1:1;

}

return ($a['startTime'] < $b['startTime']) ? -1 : 1;

}

);

$conflict = [];

$i = 0;

foreach($temp as $key=>$item){

$i++;

$compare = array_slice($temp, $i);

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

if($v['startTime']>=$item['endTime']){

continue 2;

}

if(empty($conflict)){

$conflict[$key]=[$key=>$item, $k=>$v];

}else{

$conflict[$key][$k]=$v;

}

}

}

var_dump($conflict);

以上是 php对比时间冲突,获取存在交集和子集算法 的全部内容, 来源链接: utcz.com/a/32254.html

回到顶部