2010-09-17 55 views
0

我有与含有最小每个条目和最大值为一束套的阵列的阵列,例如以下之一:合并重叠设置从套

Array 
(

    [0] => Array 
     (
      [0] => 1200 
      [1] => 2400 
     ) 

    [1] => Array 
     (
      [0] => 1400 
      [1] => 3800 
     ) 

    [2] => Array 
     (
      [0] => 2700 
      [1] => 4200 
     ) 
    [3] => Array 
     (
      [0] => 5900 
      [1] => 6400 
     ) 

) 

对于每个索引,0的索引是最小值,1指数是该特定组的最大值。我需要创建一个JavaScript或PHP函数来整合这个数组,以便重叠的集合变成一个。所以,上述的阵列将变成如下:

Array 
(

    [0] => Array 
     (
      [0] => 1200 
      [1] => 4200 
     ) 
    [1] => Array 
     (
      [0] => 5900 
      [1] => 6400 
     ) 

) 

正如你可以看到,从第一阵列indicies 0,1和2被合并为索引0为第二阵列。第一个数组中的索引3与其他任何数组都没有重叠,因此第二个数组中的索引为1。

原始数组本身将包含大约70到80组,并且最小值和最大值可以高达9999999999,因此以n,n + 1,n + 2方式遍历数字线是不可行的。

任何想法?

UPDATE +溶液

如在下面的评论说,这确实是一个重新发布(没看到其他职位)。的链接,该解决方案是在下面的链接:

Merging overlapping ranges in PHP arrays?

+0

按照你的例子,这些集合是否按下限排序? – 2010-09-17 03:13:41

+1

看起来像是重复的http://stackoverflow.com/questions/3630500/merging-overlapping-ranges-in-php-arrays/3631016 – Matthew 2010-09-17 03:48:42

+0

对不起,迟到的回复,赶上了一些项目。事实上,它看起来像一个转贴。当我在找它时没有看到那个帖子:/谢谢konforce。谢谢Andrew Cooper。 – user396404 2010-09-21 09:40:05

回答

0

假设集的例子是由下界排序,如,如何这样的事情?

var newIndex = 0; 
var newSetArray[newIndex][0] = setArray[0][0]; 
for (i = 1; i < setArray.length; i++) { 
    if (setArray[i-1][1] < setArray[i][0]) { 
     newSetArray[newIndex][1] = setArray[i-1][1]; 
     newSetArray[++newIndex][0] = setArray[i][0]; 
    } 
} 
newSetArray[newIndex][1] = setArray[setArray.length-1][1]; 

语法可能需要一些调整,但我认为这应该工作。