我在PHP中創建了一個包含unix時間戳記的數組。需要從PHP數組中獲取特定索引
我試圖做一個函數,它將返回一個數組,該數組包含該數組中3個最大數字的索引。
例如,如果人數最多的是位於索引3,5和8
如果最大的是5,第二大是8和三者中最小的是3號,我要保存的數組值(5,8,3)按此順序排列。
坦率地說,我不知道如何解決這個問題。有人知道怎麼做這個嗎?
我在PHP中創建了一個包含unix時間戳記的數組。需要從PHP數組中獲取特定索引
我試圖做一個函數,它將返回一個數組,該數組包含該數組中3個最大數字的索引。
例如,如果人數最多的是位於索引3,5和8
如果最大的是5,第二大是8和三者中最小的是3號,我要保存的數組值(5,8,3)按此順序排列。
坦率地說,我不知道如何解決這個問題。有人知道怎麼做這個嗎?
你可以使用asort到數組進行排序並保持索引,然後使用slice與第4個參數一起,再次維持指數,中把握元素的頂部x個你後,最後使用array_keys。
這可能是一種更快捷的方式,但它只是表明有很多PHP數組函數可以幫助您實現所需的效果。
西蒙發佈了簡單,可能足夠好的執行方法。
另一種選擇,只有當您有一個非常大的數組時,才能掃描數組並跟蹤您看到的三個最高值的索引。這是O(n),但(特別是因爲它在解釋的PHP代碼中,而不是編譯的內置函數),對於除最大數組之外的所有數據可能都比較慢。
在僞代碼:
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);
在PHP代碼:
function threeLargest($array){
krsort($array, "SORT_NUMERIC");
$return[0] = $array[0];
$return[1] = $array[1];
$return[2] = $array[2];
return $return;
}
謝謝,這解決了我的問題,一個小小的例外。這個函數給我3個最大的值作爲新數組中的前3個數字需要進行排序,而不是分號 – Vordreller 2008-12-07 19:44:59
啊,很高興它有幫助。或者,您可以使用array_slice來分割數組的另一端 - 但它確實是相同的區別。 – Simon 2008-12-07 19:49:17