Index de retour de la valeur la plus élevée dans un tableau

92

À partir d'un tableau qui ressemble à ce qui suit, comment puis-je obtenir l'index de la valeur la plus élevée du tableau. Pour le tableau ci-dessous, le résultat souhaité serait «11».

Array (
    [11] => 14
    [10] => 9
    [12] => 7
    [13] => 7
    [14] => 4
    [15] => 6
)
Jeff
la source
Cela fait un moment, mais votre tableau semble déjà trié (décroissant); soit c'est un mauvais exemple, soit vous avez vraiment juste besoin reset($arr); echo key($arr);:)
Ja͢ck

Réponses:

209

Ma solution est:

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

Remarque: de
cette façon, vous pouvez récupérer toutes les clés liées à une valeur maximale donnée.

Si vous n'êtes intéressé que par une clé parmi toutes, utilisez simplement $ maxs [0]

drAlberT
la source
Comment voir si deux valeurs sont identiques?
AlphaMale
vous pouvez vérifier le résultat s'il a deux valeurs ou plus s'il a des doublons
Julio Popócatl
@AlphaMale vous voulez dire deux clés je suppose, car la valeur maximale n'est qu'une par définition .. @JustinE si vous ne voulez pas de clés en double, recherchez simplement le max (c'est-à-dire éviter array_keys) et vous n'obtiendrez qu'une seule clé correspondant au max value
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 () renvoie les valeurs:

Renvoie la clé de l'aiguille si elle se trouve dans le tableau, FALSE sinon.

Si l'aiguille est trouvée dans la botte de foin plus d'une fois, la première clé correspondante est renvoyée. Pour renvoyer les clés de toutes les valeurs correspondantes, utilisez à la place array_keys () avec le paramètre optionnel search_value.

Andrejs Cainikovs
la source
12

Je sais que c'est déjà répondu mais voici une solution que je trouve plus élégante:

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

et voila!

David 天宇 Wong
la source
4
le resetn'est pas nécessaire, btw.
kuroi neko
3

D'autres réponses peuvent avoir un code plus court, mais celui-ci devrait être le plus efficace et facile à comprendre.

/**
 * 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
la source
1

Quelque chose comme ça devrait faire l'affaire

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
la source
3
Mieux vaut utiliser la clé et la valeur du premier élément comme valeur par défaut.
Gumbo le
1

Ma solution pour obtenir la clé la plus élevée est la suivante:

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

Fonction extraite 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)));

Fonctionne comme un charme

Timur Asaliev
la source
8
Sans parler de la performance. Foreaching through array, vérifier la valeur maximale à chaque fois est encore pire qu'une "mauvaise pratique".
bisko le
1
J'ai mentionné que ce n'est pas ma mise en œuvre. C'était un copier / coller rapide et sale que l'OP ne pouvait évidemment pas faire lui-même, monsieur.
Timur Asaliev
3
Je ne vais pas mentir, tu m'as fait rire un peu. Vous êtes préoccupé par max () pour chaque itération dans le tableau? C'est "pire qu'une mauvaise pratique". Non, je ne le crois pas. Ce n'est pas le plus élégant, mais ça marche.
Sean