2010-09-17 33 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]; 

語法可能需要一些調整,但我認爲這應該工作。