Php 获取$n个最大值

Php 获取$n个最大值,php,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

直截了当-

如果$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
)

谢谢大家的帮助。

快速破解Shakti的功能。但是,这可靠吗

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;


  }
}
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;
        }
    }        
}

快速破解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;
        }
    }        
}
比如:

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; });
}
比如:

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; });
}

非常快,没有循环,只需要内置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; }
非常快,没有循环,只需要内置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; }
如果你能解释一下输出,那就太好了。我想你想要的是一个数组,它只包含n个不同的最大值14,15,17的项。是的,这正是我想要的。如果你能解释一下输出,那就太好了。我想你想要的是一个数组,该数组只包含n个不同的最大值14,15,17的项。是的,这正是我想要的。对于上述输入,函数输出数组[17]=>17[18]=>17[23]=>15[00]=>15[11]=>15[14]=>14[22]=>14缺失。@KPL:-现在,这就是您要查找的输入,函数输出数组[17]=>17[18]=>17[23]=>15[00]=>15[11]=>15[14]=>14缺少[22]=>14。@KPL:-现在,这就是您要查找的