2009-09-22 18 views
65

Z tablicy, która wygląda mniej więcej tak, jak mogę uzyskać indeks o najwyższej wartości w tablicy. Dla poniższej tablicy pożądany wynik będzie wynosił "11".Indeks powrotu najwyższej wartości w tablicy

Array (

    [11] => 14 
    [10] => 9 
    [12] => 7 
    [13] => 7 
    [14] => 4 
    [15] => 6 
) 
+0

Minęło trochę czasu, ale tablica już wydaje się posortowana (zstępująca); albo jest to zły przykład, albo naprawdę potrzebujesz 'reset ($ arr); klucz echa ($ arr); ':) –

Odpowiedz

162

Moje rozwiązanie to:

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

Uwaga:
ten sposób można odzyskać każdy klucz związane z daną wartości max.

Jeśli jesteś zainteresowany tylko w jeden klucz między wszystkimi prostu użyć $ MAXS [0]

+4

Idealny. Dziękuję Ci! – Jeff

+1

Genial :) ..... –

+0

Jak sprawdzić, czy dwie wartości są takie same? – AlphaMale

1

Coś takiego powinno wystarczyć

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

Lepiej użyj klucza i wartości pierwszego elementu jako wartości domyślnej. – Gumbo

0
$newarr=arsort($arr); 
$max_key=array_shift(array_keys($new_arr)); 
24
<?php 

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

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

?> 

array_search() zwraca wartości:

Powoduje zwrócenie klucza do igły, jeśli znajduje się w tablicy, w przeciwnym razie FALSE.

Jeśli igła zostanie znaleziona w stogu siana więcej niż jeden raz, zostanie zwrócony pierwszy pasujący klucz pasujący do klucza. Aby zwrócić klucze dla wszystkich pasujących wartości, użyj zamiast tego array_keys() z opcjonalnym parametrem search_value.

-7

Funkcja pochodzi z 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))); 

działa jak czar

+7

Nie mówić o wydajności. Przepowiadanie przez tablicę, sprawdzanie maksymalnej wartości za każdym razem jest jeszcze gorsze niż "zła praktyka". – bisko

+1

Wspomniałem, że nie jest to moje wdrożenie. To była szybka i brudna kopia/wklej, że OP oczywiście nie mógł zrobić sam, panie. –

+1

Nie będę kłamać, zmusiłeś mnie do śmiechu. Obawiasz się max() dla każdej iteracji za pośrednictwem tablicy? Jest "gorszy niż zła praktyka". Nie, nie wierzę w to. To nie jest najbardziej eleganckie, ale działa. – Sean

1

moje rozwiązanie, aby uzyskać wyższy klucz jest następująca:

max(array_keys($values['Users'])); 
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/>"; 
?> 
6

wiem, że już odpowiedział, ale oto rozwiązanie, które uważam za bardziej eleganckie:

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

i voila!

+0

"Reset" nie jest konieczne, btw. –

0

Inne odpowiedzi mogą mieć krótszy kod, ale ten powinien być najbardziej wydajny i łatwy do zrozumienia.

/** 
* 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; 
} 
Powiązane problemy