Rückgabeindex mit dem höchsten Wert in einem Array

90

Wie kann ich aus einem Array, das ungefähr wie folgt aussieht, den Index des höchsten Werts im Array erhalten? Für das Array unten wäre das gewünschte Ergebnis '11'.

Array (
    [11] => 14
    [10] => 9
    [12] => 7
    [13] => 7
    [14] => 4
    [15] => 6
)
Jeff
quelle
Es ist schon eine Weile her, aber Ihr Array scheint bereits sortiert (absteigend) zu sein. Entweder ist es ein schlechtes Beispiel oder du brauchst es wirklich nur reset($arr); echo key($arr);:)
Ja͢ck

Antworten:

204

Meine Lösung ist:

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

Hinweis: Auf
diese Weise können Sie jeden Schlüssel abrufen, dersich auf einen bestimmten Maximalwert bezieht.

Wenn Sie nur an einem Schlüssel interessiert sind, verwenden Sie einfach $ maxs [0]

drAlberT
quelle
Wie kann man sehen, ob zwei Werte gleich sind?
AlphaMale
Sie können das Ergebnis überprüfen, wenn zwei oder mehr Werte vorhanden sind, wenn Duplikate vorhanden sind
Julio Popócatl
@AlphaMale Sie meinen zwei Schlüssel, nehme ich an, da der Maximalwert per Definition nur einer ist. @JustinE Wenn Sie keine doppelten Schlüssel möchten, suchen Sie einfach den Maximalwert (dh vermeiden Sie array_keys) und Sie erhalten nur einen Schlüssel, der dem Maximalwert entspricht 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 () Rückgabewerte:

Gibt den Schlüssel für die Nadel zurück, wenn er im Array gefunden wird, andernfalls FALSE.

Wird die Nadel mehrmals im Heuhaufen gefunden, wird der erste passende Schlüssel zurückgegeben. Verwenden Sie stattdessen array_keys () mit dem optionalen Parameter search_value, um die Schlüssel für alle übereinstimmenden Werte zurückzugeben.

Andrejs Cainikovs
quelle
12

Ich weiß, dass es bereits beantwortet wurde, aber hier ist eine Lösung, die ich eleganter finde:

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

und voila!

David 天宇 Wong
quelle
4
das resetist übrigens nicht nötig.
Kuroi Neko
3

Andere Antworten haben möglicherweise kürzeren Code, aber dieser sollte der effizienteste sein und ist leicht zu verstehen.

/**
 * 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
quelle
1

So etwas sollte den Trick machen

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
quelle
3
Verwenden Sie besser den Schlüssel und den Wert des ersten Elements als Standardwert.
Gumbo
1

Meine Lösung, um den höheren Schlüssel zu erhalten, lautet wie folgt:

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

Funktion aus 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)));

Klappt wunderbar

Timur Asaliev
quelle
8
Ganz zu schweigen von der Leistung. Beim Durchlaufen des Arrays ist die Überprüfung des Maximalwerts jedes Mal noch schlimmer als "schlechte Praxis".
Bisko
1
Ich erwähnte, dass es nicht meine Implementierung ist. Es war ein schnelles und schmutziges Kopieren / Einfügen, das der OP offensichtlich nicht selbst machen konnte, Herr.
Timur Asaliev
3
Ich werde nicht lügen, du hast mich ein bisschen zum Lachen gebracht. Sie sind besorgt über max () für jede Iteration durch das Array? Es ist "schlimmer als schlechte Praxis". Nein, ich glaube nicht. Es ist nicht das eleganteste, aber es funktioniert.
Sean