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