我有一个已排序的范围数组:
$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
我无法弄明白。 任何帮助将不胜感激。