【问题标题】:Need to get specific indexes out of a PHP array需要从 PHP 数组中获取特定索引
【发布时间】:2010-09-25 18:01:33
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    您可以使用asort 对数组进行排序并维护索引,然后使用slice 和第四个参数,再次维护索引,获取您所追求的前x 个元素,最后使用@ 987654323@.

    可能有更快的方法,但这只是为了表明有很多 PHP 数组函数可以帮助您实现您想要的效果。

    【讨论】:

    • 谢谢,这解决了我的问题,但有一点例外。给我 3 个最大值作为新数组中前 3 个数字的函数需要是 arsort,而不是 asort
    • 啊,很高兴它有帮助。或者,您可以使用 array_slice 对数组的另一端进行切片 - 但实际上是相同的区别。
    【解决方案2】:

    Simon 发布了简单且可能足够好的执行方法。

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

    【讨论】:

      【解决方案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);
      

      【讨论】:

        【解决方案4】:

        在 PHP 代码中:

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

        【讨论】:

        • 这不起作用。出于某种原因,数组的排序函数似乎在我的调试器中不起作用......
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-03
        • 2021-01-22
        • 2019-06-30
        • 1970-01-01
        • 2019-09-13
        • 1970-01-01
        相关资源
        最近更新 更多