获得重叠范围的嵌套

时间:2014-07-15 16:41:41

标签: php logic

我有一个已排序的范围数组:

$events = Array(
Array('start' => 1, 'end' => 5),
Array('start' => 2, 'end' => 3),
Array('start' => 4, 'end' => 5),
Array('start' => 6, 'end' => 7),
Array('start' => 6, 'end' => 8),
Array('start' => 6, 'end' => 9));

我的目标是找到重叠范围的嵌套级别(不包括)。对于此示例的成像:

n    |                                       
e  3 |                       .............   
s  2 |       .....   .....   :........   :   
t  1 |   ....:...:...:...:   :....   :   :   
.    |   :   :   :   :   :   :   :   :   :   
---------1---2---3---4---5---6---7---8---9---10---

这是我破碎的代码:

foreach($events as $k1 => &$evt1) {
    foreach($events as $k2 => &$evt2) {
        if($k1 == $k2)
            continue;

        if(is_overlapping($evt1['start'],$evt1['end'],$evt2['start'],$evt2['end'])) {
            if(!isset($evt1['l']))
                $evt1['l'] = Array();

            if(!in_array($k2, $evt1['l'])) {
                $evt1['l'][] = $k2;
            }
        }

    }
}

foreach($events as $k => &$evt) {
     echo "{$evt['start']}-{$evt['end']}: " . (count($evt['l']) + 1) . "\n";
}

并且此示例数据有一个输出(在第一行无效):

1-5: 3 <-- should be 2
2-3: 2
4-5: 2
6-7: 3
6-8: 3
6-9: 3

我无法弄明白。 任何帮助将不胜感激。

0 个答案:

没有答案