2016-07-03 19 views
0

Ich habe ein Array in einer Variablen $ Daten gespeichert. Das Array hat Namen in der ersten Zeile und einen Wert in der zweiten Zeile. Das Array ist sehr groß, also brauche ich einen Weg, um die fünf höchsten Werte daraus und den Namen von diesen Werten zu nehmen. Zum Beispiel habe ich dieses Array:Erhalte die höchsten Werte von einem Array

[0]=> 
    array(1447) { 
     [1]=> 
     array(3) { 
     [0]=> 
     string(11) "Cris" 
     [2]=> 
     string(1) "11" 
     } 
     [2]=> 
     array(3) { 
     [0]=> 
     string(7) "Alan" 
     [2]=> 
     string(1) "28" 
     } 
     [3]=> 
     array(3) { 
     [0]=> 
     string(6) "Alex" 
     [2]=> 
     string(1) "50" 
     } 
     [4]=> 
     array(3) { 
     [0]=> 
     string(6) "Zone" 
     [1]=> 
     string(1) "22" 
     } 
     [5]=> 
     array(3) { 
     [0]=> 
     string(6) "Ana" 
     [2]=> 
     string(1) "1" 
     } 
     [6]=> 
     array(3) { 
     [0]=> 
     string(6) "Fisca" 
     [1]=> 
     string(1) "5" 
     } 

In diesem Fall sollte ich an: Alex 50, 28 Alan, Zone 22, Cris 11 und Fisca 5. Ich habe versucht, eine Lösung zu finden, aber ich weiß nicht, wie sollte Ich mache oben einen Array-Wert. Kannst du mir bitte helfen? Vielen Dank im Voraus.

+0

Werfen Sie einen Blick hier: http://stackoverflow.com/q/2699086/3129708 – postrel

+0

Danke, aber ich möchte zeigen nur die fünf höchsten Werte ... als Klartext und die spezifische Nummer daneben. Ich möchte das Array nicht sortieren ... macht es Sinn? Entschuldigung, ich bin neu im Backend. – Alan

+0

Der Task-Flow wäre: 1. Sortieren Sie das Array 2. Extrahieren Sie 5 Elemente. – postrel

Antwort

0

Erste sortieren Sie Ihre Array und dann Scheibe die Top-5-:

DEMO

usort($data, function ($a, $b) { 
    return $b[1] - $a[1]; 
}); //Sort your array 

$resultant = array_slice($data,0,5); //Pick top 5 

Hinweis: Wenn Ihr Index für den Vergleich verwendet wird, unterscheidet, dann return-Anweisung ändern:

return (isset($b[1])?$b[1]:$b[2]) - (isset($a[1])?$a[1]:$a[2]); 

Beispiel:

<?php 

$data = [ 
['Cris', 11], 
['Alan', 28], 
['Alex', 50], 
['Zone', 22], 
['Ana', 1] 
]; 

usort($data, function ($a, $b) { 
    return $b[1] - $a[1]; 
}); 

print_r(array_slice($data,0,5)); 

Ergebnis:

Array 
(
    [0] => Array 
     (
      [0] => Alex 
      [1] => 50 
     ) 

    [1] => Array 
     (
      [0] => Alan 
      [1] => 28 
     ) 

    [2] => Array 
     (
      [0] => Zone 
      [1] => 22 
     ) 

    [3] => Array 
     (
      [0] => Cris 
      [1] => 11 
     ) 

    [4] => Array 
     (
      [0] => Ana 
      [1] => 1 
     ) 

) 

DEMO

+0

Danke, dass es mein Problem gelöst hat. Und danke euch allen für eure Hilfe! :) – Alan

0

diese Weise können Sie die 5 höchsten Werte Ihres Arrays zu erhalten:

<?php 
function compare($a, $b) { 
    if ($a[1] == $b[1]) { 
     return 0; 
    } 

    return ($a[1] > $b[1]) ? -1 : 1; 
} 

usort($theBigArray, "compare"); 

$fiveHighestValues = array_slice($theBigArray, 0, 5); 
?> 

($theBigArray ist Ihr Array)

Und dann können Sie Schleife durch die $fiveHighestValues var die fünf Elemente angezeigt werden, wie Sie wollen, zum Beispiel:

<?php 
foreach($fiveHighestValues as $value) { 
    echo $value[0] .' has the value '. $value[1]; 
    // output: Alex has the value 50 
} 
?> 
0

Ich würde zuerst das Array sortieren, wie diese

function mySort($a, $b) { 
    return $b[1] - $a[1]; 
} 
usort($arr, 'mySort'); 

Dann können Sie einfach die ersten 5 Werte knacken - sie sind die höchsten. Sie haben geschrieben: 'Das Array hat Namen in der ersten Zeile und einen Wert in der zweiten Zeile.', Aber ich kann sehen, dass für 'Zone' der Index '1' nicht auf '2' gesetzt ist Funktion, die Sie müssen möglicherweise einige einfache Überprüfung hinzufügen, vielleicht so etwas wie folgt aus:

function mySortWithCheck($a, $b) { 
    if (isset($b[1])) { 
     $valB = $b[1]; 
    } else { 
     $valB = $b[2]; 
    } 

    if (isset($a[1])) { 
     $valA = $a[1]; 
    } else { 
     $valA = $a[2]; 
    } 

    return $valB - $valA; 
} 
0
<?php 
$data = array(
      array("Cris", "11"), 
      array("Alan", "28"), 
      array("Alex","50"), 
      array("Zone","22"), 
      array("Ana","1") 
     ); 

var_dump($data); 

function custom_array_sort($a, $b) { 
    return $b[1] - $a[1]; 
} 

usort($data,'custom_array_sort'); 

$sorted = array_slice($data,0,5); 
var_dump($sorted); 

?> 
Verwandte Themen