2010-06-05 6 views
1

j'ai un tableau comme celui-ciComment trouver le double et la plus haute valeur dans un tableau

array={'a'=>'2','b'=>'5', 'c'=>'6', 'd'=>'6', 'e'=>'2'}; 

La valeur du tableau peut être différent selon les $ _POST. Ma question est comment trouver la valeur la plus élevée dans mon tableau et retourner la clé d'index. Dans mon cas, je dois obtenir 'c' et 'd' et la valeur de 6. Je ne sais pas comment faire cela. Toute aide serait appréciée. Merci.

Répondre

4
$max = max(array_values($array)); 
$keys = array_keys($array, $max); 
+0

Merci pour la réponse. +1 – FlyingCat

+3

Vous ne devriez pas utiliser 'max (array_values ​​($ array))' inline. L'OP veut seulement obtenir la valeur. Séparez-le en deux déclarations. '$ keys' ne contiendra que les clés. –

+0

@Felix Kling - Je n'ai pas compris qu'il se fichait du nombre maximum ... – mmattax

0

Ou cela devrait faire de la magie, il serait probablement plus rapide que php fonctions intégrées

$maxValue = -1; 
$max = array(); 
foreach ($items as $key => $item) { 
    if ($item == $maxValue) { 
     $max[] = $key; 
    } elseif ($item > $maxValue) { 
     $max = array(); 
     $max[] = $key; 
     $maxValue = $item; 
    } 
} 
+1

Pourriez-vous m'expliquer pourquoi c'est probablement plus rapide? –

+0

Max, array_keys et array_values ​​probablement tous tous itére à travers le tableau, ma fonction juste une fois. Cependant, c'est si rapide, peu importe. –

1

Jetez un oeil à arsort qui trier un tableau dans l'ordre inverse et de maintenir l'association des index. Donc:

arsort($array); 

Cela se terminera avec les plus grandes valeurs au sommet du tableau. En fonction de ce dont vous avez besoin array_unique peut supprimer les valeurs en double de votre tableau.

+0

J'ai besoin d'obtenir l'index de la valeur dupliquée. Mais merci. +1 – FlyingCat

+1

Le tri est O (n log n). Cela peut être fait en O (n). –

1
$array = array(
    'key1' => 22, 
    'key2' => 17, 
    'key3' => 19, 
    'key4' => 21, 
    'key5' => 24, 
    'key6' => 8, 
); 

function getHighest($array) 
{ 
    $highest = 0; 
    foreach($array as $index => $value) 
    { 
     if(is_numeric($value) && $value > $highest) 
     { 
      $highest = $index; 
     } 
    } 
    return $highest; 
} 

echo getHighest($array); //key5 
+0

J'ai besoin d'obtenir l'index de clé en double. Bonne fonction cependant. +1 – FlyingCat

+0

a été modifié pour renvoyer la clé d'index. – RobertPitt