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
)

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]


¿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.


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á!


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;
}

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;
}

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']));

0
$newarr=arsort($arr);
$max_key=array_shift(array_keys($new_arr));

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/>";
?> 

-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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.