2008-12-07 117 views
1

我在PHP中創建了一個包含unix時間戳記的數組。需要從PHP數組中獲取特定索引

我試圖做一個函數,它將返回一個數組,該數組包含該數組中3個最大數字的索引。

例如,如果人數最多的是位於索引3,5和8

如果最大的是5,第二大是8和三者中最小的是3號,我要保存的數組值(5,8,3)按此順序排列。

坦率地說,我不知道如何解決這個問題。有人知道怎麼做這個嗎?

回答

7

你可以使用asort到數組進行排序並保持索引,然後使用slice與第4個參數一起,再次維持指數,中把握元素的頂部x個你後,最後使用array_keys

這可能是一種更快捷的方式,但它只是表明有很多PHP數組函數可以幫助您實現所需的效果。

+0

謝謝,這解決了我的問題,一個小小的例外。這個函數給我3個最大的值作爲新數組中的前3個數字需要進行排序,而不是分號 – Vordreller 2008-12-07 19:44:59

+0

啊,很高興它有幫助。或者,您可以使用array_slice來分割數組的另一端 - 但它確實是相同的區別。 – Simon 2008-12-07 19:49:17

1

西蒙發佈了簡單,可能足夠好的執行方法。

另一種選擇,只有當您有一個非常大的數組時,才能掃描數組並跟蹤您看到的三個最高值的索引。這是O(n),但(特別是因爲它在解釋的PHP代碼中,而不是編譯的內置函數),對於除最大數組之外的所有數據可能都比較慢。

0

在僞代碼:

function select(list[1..n], k) 
    for i from 1 to k 
     maxIndex = i 
     maxValue = list[i] 
     for j from i+1 to n 
      if list[j] > maxValue 
       maxIndex = j 
       maxValue = list[j] 
     swap list[i] and list[maxIndex] 
    return list[k] 

newarray[] = select(array, 1); 
newarray[] = select(array, 2); 
newarray[] = select(array, 3); 
-1

在PHP代碼:

function threeLargest($array){ 
krsort($array, "SORT_NUMERIC"); 
$return[0] = $array[0]; 
$return[1] = $array[1]; 
$return[2] = $array[2]; 
return $return; 
}