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
)

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]


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.


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!


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

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

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

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

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


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.