我在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