需要从PHP数组中获取特定索引

时间:2008-12-07 15:53:17

标签: php arrays

我在PHP中创建了一个包含unix时间戳的数组。

我正在尝试创建一个函数,该函数将返回一个包含该数组中3个最大数字的索引的数组。

例如,如果最大数字位于索引3,5和8

如果最大值为5,则第二大值为8,三者中最小值为3,我想要一个按此顺序保存值(5,8,3)的数组。

坦率地说,我不知道如何解决这个问题。有人知道怎么做吗?

4 个答案:

答案 0 :(得分:7)

您可以使用asort对数组进行排序并维护索引,然后使用slice和第4个参数再次维护索引,以绘制您所追求的前x个元素,最后使用array_keys

可能有一种更快捷的方式,但它只是表明有大量的PHP数组函数可以帮助您实现所需的效果。

答案 1 :(得分:1)

西蒙发布了简单且可能足够好的表演方法。

另一个选项,只有你有一个非常大的数组,是扫描数组并跟踪你看到的三个最高值的索引。这是O(n),但是(特别是因为它在解释的PHP代码中,而不是编译的内置函数),除了最大的数组之外的所有数据都可能更慢。

答案 2 :(得分: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);

答案 3 :(得分:-1)

在PHP代码中:

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