2009-10-19 13 views
36

w PHP, że masz tablicę asocjacyjną takiego:Znalezienie klucza minimalną wartość w tablicy asocjacyjnej

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

Jak znajdę klucz o najniższej wartości? Tutaj będę szukał cats.

Czy jest jakiś wbudowany w funkcję PHP, które przegapiłem, który to robi? Byłoby również wspaniale, gdyby nie było to rozwiązanie, które stanowiły kilka wartości są takie same, jak poniżej:

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

powyżej, że nie miałby nic przeciwko, jeśli tylko wyjście albo; cats lub dogs.

Z góry dziękuję.

Odpowiedz

83

array_keys jest twoim przyjacielem:

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

PS:: tam jest dup na SO (miał max zamiast min, ale mogę go wyraźnie zapamiętać).

+0

To sprytny =) Może powinieneś wspomnieć, że zwraca listę 1 lub więcej wartości (chyba że tablica jest pusta.) – Blixt

+0

Naprawiłem komentarz, mam nadzieję, że teraz będzie jasne. – SilentGhost

+0

Dzięki za wspaniałą odpowiedź. :) –

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

Można też odwrócić tablicę i sortować je według klucza:

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

Wtedy pierwszy klucz jest minimalna, a jej wartość jest kluczem w oryginalnej tablicy.

+0

zapomniałeś zamknąć nawias. Korzystanie z funkcji array_keys i min, zgodnie z sugestią SilentGhost, będzie łatwiejsze i szybsze. –

+0

Dzięki, naprawiłem wspornik. –

2

może próbować patrząc na nich:

+4

Powyższe linki są do okropnych w3schools, tutaj są odpowiednie linki podręcznika PHP (aby zaoszczędzić ci kilka sekund): http://php.net/manual/en/function.natcasesort.php http://php.net/manual/en/function.natsort.php –

-2

znaleźć najwyższą wartość

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

powraca -> 120

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

zwroty -> 155

znaleźć najmniejszą wartość

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

zwroty -> 7

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

zwroty -> 5

+2

Pytanie dotyczy znalezienia klucza, a nie tylko val ue. – marcovtwout

6

Tak, jak to zrobiłem.

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

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

Mam nadzieję, że pomaga

Powiązane problemy