2009-10-19 16 views
36

In PHP, sagt, dass Sie ein assoziatives Array wie diese:Suche nach dem Schlüssel des Minimalwertes in einem assoziativen Array

$pets = array(
    "cats" => 1, 
    "dogs" => 2, 
    "fish" => 3 
); 

Wie würde ich den Schlüssel mit dem niedrigsten Wert finden? Hier würde ich nach cats suchen.

Gibt es eine eingebaute PHP-Funktion, die ich verpasst habe, was macht das? Es wäre auch schön, wenn es eine Lösung, die für mehrere Werte identisch ist, wie unten entfielen:

$pets = array(
    "cats" => 1, 
    "dogs" => 1, 
    "fish" => 2 
); 

Oben, ich habe nichts dagegen, wenn es nur Ausgang entweder; cats oder dogs.

Vielen Dank im Voraus.

Antwort

83

array_keys ist dein Freund:

$pets = array(
    "cats" => 1, 
    "dogs" => 2, 
    "fish" => 3 
); 
array_keys($pets, min($pets)); # array('cats') 

P. S.: da ist irgendwo irgendwo auf SO eine dup (es hatte max statt min, aber ich kann mich genau daran erinnern).

+0

Das ist ein cleveres =) Vielleicht sollten Sie erwähnen, dass es eine Liste von 1 oder mehr Werten zurückgibt (außer das Array ist leer.) – Blixt

+0

Ich habe den Kommentar behoben, ich hoffe, es wird jetzt klar sein. – SilentGhost

+0

Danke für eine großartige Antwort. :) –

2
$min_val = null; 
$min_key = null; 
foreach($pets as $pet => $val) { 
    if ($val < $min_val) { 
    $min_val = $min; 
    $min_key = $key; 
    } 
} 

Sie können auch die Array-Flip und durch Schlüssel sortieren:

$flipped = array_flip($pets); 
ksort($flipped); 

Dann wird der erste Schlüssel ist das Minimum, und sein Wert ist der Schlüssel in der ursprünglichen Anordnung.

+0

Sie hilft, eine Klammer zu schließen vergessen. Und die Verwendung von array_keys und min, wie von SilentGhost vorgeschlagen, wird einfacher und schneller. –

+0

Danke, ich habe die Halterung befestigt. –

2

könnten versuchen, ein Blick in diese:

+4

Die Links oben sind zu den schrecklichen w3schools, hier sind die richtigen PHP Handbuch Links (um Sie zu retten einige Sekunden): http://php.net/manual/en/function.natcasestort.php –

-2

den höchsten Wert finden

print max(120, 7, 8, 50); 

kehrt -> 120

$array = array(100, 7, 8, 50, 155, 78); 
print max($array); 

kehrt -> 155

finden den niedrigsten Wert

print min(120, 7, 8, 50); 

kehrt -> 7

$array = array(50, 7, 8, 101, 5, 78); 
print min($array); 

returns -> 5

+2

Die Frage ist, den Schlüssel zu finden, nicht nur das Val Ue. – marcovtwout

6

So habe ich es gemacht.

$pets = array(
    "cats" => 1, 
    "dogs" => 2, 
    "fish" => 3 
); 

array_search(min($pets), $pets); 

Ich hoffe, dass

Verwandte Themen