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
)

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]


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.


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!


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

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

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

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

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.