2009-10-19 16 views
36

En PHP, decir que tiene una matriz asociativa como esto:hallazgo clave del valor mínimo en una matriz asociativa

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

¿Cómo puedo encontrar la llave con el valor más bajo? Aquí, estaría buscando cats.

¿Hay alguna función PHP incorporada que me he perdido que hace esto? También sería genial si había una solución que representó varios valores son idénticos, como a continuación:

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

Por encima, no me importaría si sólo de salida tampoco; cats o dogs.

Gracias de antemano.

Respuesta

83

array_keys es su amigo:

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

P. S.: hay un dup aquí en alguna parte en SO (tenía max en lugar de min, pero puedo recordarlo claramente).

+0

Eso es inteligente =) Tal vez deberías mencionar que devuelve una lista de 1 o más valores (a menos que la matriz esté vacía) – Blixt

+0

He corregido el comentario, espero que quede claro ahora. – SilentGhost

+0

Gracias por una gran respuesta. :) –

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

También puede voltear la matriz y ordenarla por clave:

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

A continuación, la primera clave es el mínimo, y su valor es la clave de la matriz original.

+0

Usted se olvidó de cerrar una abrazadera. Y usar array_keys y min, como sugiere SilentGhost, será más fácil y más rápido. –

+0

Gracias, arreglé el soporte. –

2

puede ser que intente buscar en estas:

+4

Los enlaces de arriba son para las horribles w3schools, aquí están los enlaces manuales de PHP adecuados (para ahorrarle un unos segundos): http://php.net/manual/en/function.natcasesort.php http://php.net/manual/en/function.natsort.php –

-2

encontrar el valor más alto

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

retornos -> 120

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

devoluciones -> 155

encontrar el valor más bajo

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

devoluciones -> 7

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

devoluciones -> 5

+2

La pregunta es sobre encontrar la clave, no solo el val ue. – marcovtwout

6

Así es como lo hice.

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

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

Yo espero que ayude

Cuestiones relacionadas