从数组中查找4个最高值

时间:2011-05-15 12:45:28

标签: php arrays max

如何使用max()从数组中选择4个最高值,而不仅仅是1?

6 个答案:

答案 0 :(得分:10)

您可以使用SplMaxHeap

function maxN(array $numbers, $n)
{
    $maxHeap = new SplMaxHeap;
    foreach($numbers as $number) {
        $maxHeap->insert($number);
    }
    return iterator_to_array(
        new LimitIterator($maxHeap, 0, $n)
    );
}

用法(demo):

print_r( maxN( array(7,54,2,4,26,7,82,4,34), 4 ) );

答案 1 :(得分:7)

你可以试试这个:

$a = array(3,5,6,1,23,6,78,99);
asort($a);
var_dump(array_slice($a, -4));

HTH。

答案 2 :(得分:6)

这将在Θ(n)时间内完成:

$a = $b = $c = $d = null;
foreach($array as $v) {
  if(!isset($a) || $v > $a) {
    $d = $c;
    $c = $b;
    $b = $a;
    $a = $v;
  }elseif(!isset($b) || $v > $b) {
    $d = $c;
    $c = $b;
    $b = $v;
  }elseif(!isset($c) || $v > $c) {
    $d = $c;
    $c = $v;
  }elseif(!isset($d) || $v > $d) {
    $d = $v;
  }
}

$result = array($a, $b, $c, $d);

答案 3 :(得分:2)

function maxs($ar, $count=4) 
{
    $res = array();

    foreach ($ar as $v) 
    {
        for ($i = 0;$i < $count;$i++) 
        {
            if ($i >= count($res) || $v > $res[$i]) 
            {
                do 
                {
                    $tmp = $res[$i];
                    $res[$i] = $v;
                    $v = $tmp;
                    $i++;
                } 
                while ($i < $count);
                    break;
            }
        }
    }
    return $res;
}

答案 4 :(得分:1)

使用php预定义函数的简单方法。

<?php
  $arr = array(6, 8, 3, 2, 7, 9);

  rsort($arr);

  $first = array_shift($arr);
  $second = array_shift($arr);
  $third = array_shift($arr);

  echo $first; // print 9
  echo $second; // print 8
  echo $third; // print 7
?>

答案 5 :(得分:0)

存储自身时,只要插入新项目,就可以维护另一个数组。如果插入的项目更大,则检查内部数组中的最大值是否插入此项目。在项目流行期间做反之亦然。从内部维护的数组中,您可以获得尽可能多的最大数字。