2009-09-22 18 views
65

A partir de una matriz que se parece a la siguiente, ¿cómo puedo obtener el índice del valor más alto en la matriz. Para la matriz a continuación, el resultado deseado sería '11'.Devuelve el índice del valor más alto en una matriz

Array (

    [11] => 14 
    [10] => 9 
    [12] => 7 
    [13] => 7 
    [14] => 4 
    [15] => 6 
) 
+0

Ha pasado un tiempo, pero su matriz ya parece ordenada (descendente); o es un mal ejemplo o simplemente necesitas 'reset ($ arr); echo key ($ arr); ':) –

Respuesta

162

Mi solución es:

$maxs = array_keys($array, max($array)) 

Nota:
esta manera se puede recuperar cada llave relacionado con un valor máximo dado .

Si usted está interesado únicamente en una llave entre todos simplemente utilizar $ maxs [0]

+4

Perfecto. ¡Gracias! – Jeff

+1

Genial :) ..... –

+0

¿Cómo ver si dos valores son iguales? – AlphaMale

1

Algo como esto debe hacer el truco

function array_max_key($array) { 
    $max_key = -1; 
    $max_val = -1; 

    foreach ($array as $key => $value) { 
    if ($value > $max_val) { 
     $max_key = $key; 
     $max_val = $value; 
    } 
    } 

    return $max_key; 
} 
+3

Mejor utilice la clave y el valor del primer artículo como valor predeterminado. – Gumbo

0
$newarr=arsort($arr); 
$max_key=array_shift(array_keys($new_arr)); 
24
<?php 

$array = array(11 => 14, 
       10 => 9, 
       12 => 7, 
       13 => 7, 
       14 => 4, 
       15 => 6); 

echo array_search(max($array), $array); 

?> 

array_search() return values:

Devuelve la clave de la aguja si se encuentra en la matriz, de lo contrario, FALSO.

Si la aguja se encuentra en el pajar más de una vez, se devuelve la primera clave coincidente . Para devolver las claves de todos los valores coincidentes, utilice array_keys() con el parámetro opcional search_value en su lugar.

-7

Función tomado de http://www.php.net/manual/en/function.max.php

function max_key($array) { 
    foreach ($array as $key => $val) { 
     if ($val == max($array)) return $key; 
    } 
} 

$arr = array (
    '11' => 14, 
    '10' => 9, 
    '12' => 7, 
    '13' => 7, 
    '14' => 4, 
    '15' => 6 
); 

die(var_dump(max_key($arr))); 

funciona como un encanto

+7

Para no hablar de rendimiento. Avanzar a través de la matriz, comprobar el valor máximo cada vez es incluso peor que la "mala práctica". – bisko

+1

Mencioné que no es mi implementación. Fue un copy/paste rápido y sucio que obviamente el OP no pudo hacer, señor. –

+1

No voy a mentir, me hiciste reír un poco. ¿Le preocupa max() para cada iteración a través de la matriz? Es "peor que mala práctica". No, no lo creo. No es el más elegante, pero funciona. – Sean

1

Mi solución para conseguir el tono más alto es el siguiente:

max(array_keys($values['Users'])); 
0
<?php 
$array = array (
    '11' => 14, 
    '10' => 9, 
    '12' => 7, 
    '13' => 7, 
    '14' => 4, 
    '15' => 6 
); 

foreach ($array as $key => $value) { 
    if ($value >= $max) 
     $max = max($array);   
} 
echo " The array in Maximum Value :".$max."<br/>"; 
?> 
6

Sé que ya ha contestado, pero Aquí hay una solución que me parece más elegante:

arsort($array); 
reset($array); 
echo key($array); 

y listo!

+0

el 'reinicio' no es necesario, por cierto. –

0

Otras respuestas pueden tener un código más corto, pero este debe ser el más eficiente y fácil de entender.

/** 
* Get key of the max value 
* 
* @var array $array 
* @return mixed 
*/ 
function array_key_max_value($array) 
{ 
    $max = null; 
    $result = null; 
    foreach ($array as $key => $value) { 
     if ($max === null || $value > $max) { 
      $result = $key; 
      $max = $value; 
     } 
    } 

    return $result; 
} 
Cuestiones relacionadas