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

需要从PHP数组中获取特定索引,php,arrays,Php,Arrays,我用PHP制作了一个数组,其中包含一组unix时间戳 我试图创建一个函数,它将返回一个数组,其中包含该数组中3个最大数字的索引 例如,如果最大的数字位于索引3、5和8 如果最大的是5,第二大的是8,三个中最小的是数字3,我想要一个数组,按这个顺序保存值(5,8,3) 坦白地说,我不知道该怎么办。有人知道如何做到这一点吗?西蒙发布了一个简单且可能足够好的执行方法 另一个选项(仅当您有一个非常大的数组时)是扫描数组并跟踪您看到的三个最高值的索引。这是O(n),但是(特别是因为它是在解释的PHP代码中

我用PHP制作了一个数组,其中包含一组unix时间戳

我试图创建一个函数,它将返回一个数组,其中包含该数组中3个最大数字的索引

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

如果最大的是5,第二大的是8,三个中最小的是数字3,我想要一个数组,按这个顺序保存值(5,8,3)


坦白地说,我不知道该怎么办。有人知道如何做到这一点吗?

西蒙发布了一个简单且可能足够好的执行方法


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

Simon发布了这个简单且性能可能足够好的方法

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

您可以使用对数组进行排序并维护索引,然后与第4个参数一起使用,同样用于维护索引,以绘制所需元素的前x个数,最后使用

可能有一种更快的方法,但这只是为了说明有很多PHP数组函数可以帮助您实现所需的效果。

您可以使用该函数对数组进行排序并维护索引,然后与第4个参数一起使用,再次维护索引,绘制所需元素的前x个数,最后使用

可能有一种更快的方法,但这只是为了说明有很多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);
在伪代码中:

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;
}
在PHP代码中:

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

这不起作用。出于某种原因,数组的非排序函数似乎在我的调试器中工作……这不起作用。出于某种原因,数组的非排序函数似乎在我的调试器中工作……谢谢,这解决了我的问题,只有一个小例外。新数组中前3个数字的3个最大值的函数应该是arsort,而不是asortAh,很高兴这有帮助。或者,您可以使用array_slice对数组的另一端进行切片,但实际上是相同的区别。谢谢,这解决了我的问题,只有一个小例外。新数组中前3个数字的3个最大值的函数应该是arsort,而不是asortAh,很高兴这有帮助。或者,您可以使用array_slice对数组的另一端进行切片,但实际上是相同的区别。