获得$ n个最大值

时间:2011-01-01 07:17:58

标签: php

直接提问 -

如果$ n = 3,

并输入 -

Array
(
    [04] => 3
    [07] => 4
    [01] => 5
    [06] => 5
    [05] => 5
    [03] => 6
    [08] => 6
    [02] => 7
    [09] => 8
    [12] => 9
    [10] => 10
    [15] => 10
    [19] => 11
    [20] => 11
    [13] => 12
    [21] => 12
    [16] => 13
    [14] => 14
    [22] => 14
    [23] => 15
    [11] => 15
    [00] => 15
    [17] => 17
    [18] => 17
)

输出应为 -

Array
(   [14] => 14
    [22] => 14
    [23] => 15
    [11] => 15
    [00] => 15
    [17] => 17
    [18] => 17
)

谢谢大家,求助。

4 个答案:

答案 0 :(得分:5)

类似的东西:

function biggest_n(array $a, $n)
{
  $u = array_unique($a);
  if (count($u) <= $n) return $a;
  rsort($u);
  $val = $u[$n - 1];

  return array_filter($a, function($e) use($val) { return $e >= $val; });
}

答案 1 :(得分:1)

arsort($array);
function output($array,$n)
{
  $c=0;
  $newArray=array();
  foreach ($array as $key => $value)
  {
    if ($c == $n)
    {
      $newArray[$key]=$value;
      return $newArray;
    }
    if (!in_array($value, $newArray))
    {
        $c++;
    }
    $newArray[$key]=$value;


  }
}

答案 2 :(得分:0)

快速入侵Shakti的功能。但是,这可靠吗?

function getMaxValues( $array, $total ) {
    arsort( $array );
    $count = 0;
    $return = array();   
    $total++;
    foreach ($array as $key => $value)  {
        if ( !in_array( $value, $return ) )
            $count++;        
        $return[ $key ] = $value;
        if ( $count == $total ) {
            array_pop($return);
            return $return;
        }
    }        
}

答案 3 :(得分:0)

真的很快,没有循环,只需要内置的PHP函数

function getMaxValues($array, $number)
{
    $tmp = $array;
    asort($array);

    $values_cnt = array_count_values($array);
    $max_val_cnt = array_slice($values_cnt, count($values_cnt)-$number);
    $max_val_cnt = array_sum($max_val_cnt);

    $ret = array_slice($tmp, count($tmp)-$max_val_cnt, $max_val_cnt, true);

    return $ret;
}