2011-01-01 13 views
1

Gerade auf die Frage -

Wenn $ n = 3,

und Eingang -

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 
) 

ausgegeben werden soll -

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

Danke, alle, um Hilfe.

+0

erforderlich wäre schön gewesen, wenn die Ausgabe ein wenig erklärt. Ich denke, was Sie wollen, ist ein Array, das nur Elemente mit den 'n' verschiedenen größten Werten (14,15,17 für diesen Eingang) enthält. – schnaader

+0

Ja, genau das möchte ich. – kapeels

Antwort

5

Etwas wie:

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


    } 
} 
+0

+1 für gute Logik, wollen bessere Logik entwickeln – XMen

+0

Für die obigen Eingabe, die Funktion gibt Array ([17] => 17 [18] => 17 [23] => 15 [00] => 15 [11] => 15 [14] => 14) Das [22] => 14 fehlt. – kapeels

+0

Keine Änderung überhaupt. : | – kapeels

0

Ein kurzer Hack in Shaktis Funktion. Aber ist das zuverlässig?

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

Wirklich schnell, keine Schleife, nur eingebaute PHP-Funktion

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