我在PHP中创建了一个包含unix时间戳的数组。
我正在尝试创建一个函数,该函数将返回一个包含该数组中3个最大数字的索引的数组。
例如,如果最大数字位于索引3,5和8
如果最大值为5,则第二大值为8,三者中最小值为3,我想要一个按此顺序保存值(5,8,3)的数组。
坦率地说,我不知道如何解决这个问题。有人知道怎么做吗?
答案 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;
}