Нахождение 4 самых высоких значений из массива - PullRequest
0 голосов
/ 15 мая 2011

Вместо 1, как я могу выбрать 4 максимальных значения из массива, используя max()?

Ответы [ 6 ]

10 голосов
/ 15 мая 2011

Вы можете использовать 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)
    );
}

Использование ( демо ):

print_r( maxN( array(7,54,2,4,26,7,82,4,34), 4 ) );
7 голосов
/ 15 мая 2011

Вы можете попробовать это:

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

НТН.

6 голосов
/ 15 мая 2011

Это будет сделано за время Θ (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);
2 голосов
/ 15 мая 2011
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;
}
1 голос
/ 23 февраля 2013

Простой метод с использованием предопределенных функций 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
?>
0 голосов
/ 15 мая 2011

Сохраняя себя, вы можете поддерживать другой массив, как только новый элемент будет вставлен, проверьте максимальное значение во внутреннем массиве, если вставляемый элемент больше, вставьте этот элемент. Во время пункта поп делай наоборот. Из внутреннего поддерживаемого массива вы можете получить максимально возможное количество чисел.

...