Devuelve el índice de mayor valor en una matriz

92

De una matriz que se parece a lo siguiente, ¿cómo puedo obtener el índice del valor más alto en la matriz? Para la siguiente matriz, el resultado deseado sería '11'.

Array (
    [11] => 14
    [10] => 9
    [12] => 7
    [13] => 7
    [14] => 4
    [15] => 6
)
Jeff
fuente
Ha pasado un tiempo, pero su matriz ya parece ordenada (descendente); o es un mal ejemplo o simplemente necesitas reset($arr); echo key($arr);:)
Ja͢ck

Respuestas:

209

Mi solucion es:

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

Nota: de
esta manera puede recuperar todas las claves relacionadas con un valor máximo dado.

Si solo está interesado en una clave entre todas, simplemente use $ maxs [0]

drAlberT
fuente
¿Cómo ver si dos valores son iguales?
AlphaMale
puede verificar el resultado si tiene dos o más valores si tiene duplicados
Julio Popócatl
@AlphaMale te refieres a dos claves, supongo, ya que el valor máximo es solo una por definición .. @JustinE si no quieres claves duplicadas simplemente busca el máximo (es decir, evita array_keys) y obtendrás solo una clave correspondiente al máximo valor
drAlberT
36
<?php

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

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

?>

array_search () valores de retorno:

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

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

Andrejs Cainikovs
fuente
12

Sé que ya está respondida, pero aquí hay una solución que encuentro más elegante:

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

¡y voilá!

David 天宇 Wong
fuente
4
el resetno es necesario, por cierto.
kuroi neko
3

Otras respuestas pueden tener un código más corto, pero esta debería ser la 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;
}
luchaninov
fuente
1

Algo como esto debería 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;
}
Aistina
fuente
3
Es mejor utilizar la clave y el valor del primer elemento como valor predeterminado.
Gumbo
1

Mi solución para obtener la clave más alta es la siguiente:

max(array_keys($values['Users']));
xmatzx
fuente
0
$newarr=arsort($arr);
$max_key=array_shift(array_keys($new_arr));
dnagirl
fuente
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/>";
?> 
Hanifeoglu
fuente
-7

Función tomada 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 de maravilla

Timur Asaliev
fuente
8
Por no hablar de rendimiento. Hacer una búsqueda a través de una matriz, comprobar el valor máximo cada vez es incluso peor que una "mala práctica".
bisko
1
Mencioné que no es mi implementación. Fue una copia / pegado rápido y sucio que el OP obviamente no pudo hacer él mismo, señor.
Timur Asaliev
3
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 una mala práctica". No, no creo que lo sea. No es el más elegante, pero funciona.
Sean