Restituisce l'indice del valore più alto in una matrice


92

Da un array simile al seguente, come posso ottenere l'indice del valore più alto nell'array. Per la matrice di seguito, il risultato desiderato sarebbe "11".

Array (
    [11] => 14
    [10] => 9
    [12] => 7
    [13] => 7
    [14] => 4
    [15] => 6
)

È passato un po 'di tempo, ma il tuo array sembra già ordinato (discendente); o è un cattivo esempio o hai davvero solo bisogno di reset($arr); echo key($arr);:)
Ja͢ck

Risposte:


209

La mia soluzione è:

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

Nota: in
questo modo puoi recuperare ogni chiave relativa a un dato valore massimo .

Se sei interessato solo a una chiave tra tutte, utilizza semplicemente $ maxs [0]


Come vedere se due valori sono uguali?
AlphaMale

puoi controllare il risultato se ha due o più valori se ha duplicati
Julio Popócatl

@AlphaMale intendi due chiavi suppongo, poiché il valore massimo è solo uno per definizione .. @JustinE se non vuoi chiavi duplicate cerca semplicemente il massimo (cioè evita array_keys) e otterrai solo una chiave corrispondente al massimo value
drAlberT

36
<?php

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

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

?>

valori restituiti da array_search ():

Restituisce la chiave per l'ago se si trova nell'array, altrimenti FALSE.

Se l'ago viene trovato nel pagliaio più di una volta, viene restituita la prima chiave corrispondente . Per restituire le chiavi per tutti i valori corrispondenti, utilizzare invece array_keys () con il parametro search_value opzionale.


12

So che ha già risposto ma ecco una soluzione che trovo più elegante:

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

e voilà!


4
il resetnon è necessario, btw.
kuroi neko,

3

Altre risposte possono avere un codice più breve, ma questa dovrebbe essere la più efficiente ed è facile da capire.

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

Qualcosa di simile dovrebbe fare il trucco

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
È meglio utilizzare la chiave e il valore del primo elemento come valore predefinito.
Gumbo,

1

La mia soluzione per ottenere la chiave più alta è la seguente:

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

Funzione tratta da 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)));

Funziona come un fascino


8
Per non parlare delle prestazioni. Foreaching attraverso array, controllare il valore massimo ogni volta è anche peggio di "cattiva pratica".
bisko

1
Ho detto che non è la mia implementazione. Era un copia / incolla veloce e sporco che l'OP ovviamente non poteva fare da solo, signore.
Timur Asaliev,

3
Non mentirò, mi hai fatto ridere un po '. Sei preoccupato per max () per ogni iterazione attraverso l'array? È "peggio della cattiva pratica". No, non credo che lo sia. Non è il più elegante, ma funziona.
Sean
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.