Zwraca indeks najwyższej wartości w tablicy

92

Z tablicy, która wygląda mniej więcej tak, jak mogę uzyskać indeks najwyższej wartości w tablicy. Dla tablicy poniżej pożądanym wynikiem będzie „11”.

Array (
    [11] => 14
    [10] => 9
    [12] => 7
    [13] => 7
    [14] => 4
    [15] => 6
)
Jeff
źródło
Minęło trochę czasu, ale twoja tablica wydaje się już posortowana (malejąco); albo to zły przykład, albo naprawdę po prostu potrzebujesz reset($arr); echo key($arr);:)
Ja͢ck

Odpowiedzi:

209

Moje rozwiązanie to:

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

Uwaga: w
ten sposób możesz pobrać każdy klucz związany z daną wartością maksymalną .

Jeśli interesuje Cię tylko jeden klucz spośród wszystkich, po prostu użyj $ maxs [0]

drAlberT
źródło
Jak sprawdzić, czy dwie wartości są takie same?
AlphaMale
możesz sprawdzić wynik, jeśli ma dwie lub więcej wartości, jeśli ma duplikaty
Julio Popócatl
@AlphaMale masz na myśli dwa klucze, jak przypuszczam, ponieważ maksymalna wartość jest tylko jeden z definicji .. @JustinE jeśli nie chcesz zduplikowanych kluczy, po prostu wyszukaj maksimum (tj. Unikaj array_keys), a otrzymasz tylko jeden klucz odpowiadający maksymalnej wartość
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 () zwraca wartości:

Zwraca klucz igły, jeśli zostanie znaleziony w tablicy, FALSE w przeciwnym razie.

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

Andrejs Cainikovs
źródło
12

Wiem, że mam już odpowiedź, ale oto rozwiązanie, które uważam za bardziej eleganckie:

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

i voila!

David 天宇 Wong
źródło
4
przy resetokazji nie jest to konieczne.
kuroi neko,
3

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;
}
luchaninov
źródło
1

Coś takiego powinno załatwić sprawę

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
źródło
3
Lepiej użyj klucza i wartości pierwszego elementu jako wartości domyślnej.
Gumbo
1

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

max(array_keys($values['Users']));
xmatzx
źródło
0
$newarr=arsort($arr);
$max_key=array_shift(array_keys($new_arr));
dnagirl
źródło
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
źródło
-7

Funkcja zaczerpnięta 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 marzenie

Timur Asaliev
źródło
8
Nie mówiąc o wydajności. Wyszukiwanie przez tablicę, sprawdzanie maksymalnej wartości za każdym razem jest nawet gorsze niż „zła praktyka”.
bisko
1
Wspomniałem, że to nie moja realizacja. To była szybka i brudna kopia / wklej, której OP oczywiście nie mógł zrobić sam, panie.
Timur Asaliev
3
Nie zamierzam kłamać, sprawiłeś, że się zaśmiałem. Martwisz się o max () dla każdej iteracji przez tablicę? To „gorsze niż zła praktyka”. Nie, nie wierzę, że tak jest. Nie jest najbardziej elegancki, ale działa.
Sean,