2008-12-07 64 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; 
}