2009-09-22 21 views
65

Da un array che assomiglia a quanto segue, come posso ottenere l'indice del valore più alto nell'array. Per l'array sottostante, il risultato desiderato sarebbe "11".Indice di ritorno del valore più alto in un array

Array (

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

È passato un po 'di tempo, ma il vostro array sembra già ordinato (decrescente); o è un cattivo esempio o hai davvero bisogno di 'reset ($ arr); echo key ($ arr); ':) –

risposta

162

La mia soluzione è:

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

Nota:
questo modo è possibile recuperare ogni chiave relative a un dato valore massimo .

Se siete interessati solo a una chiave tra tutti è sufficiente utilizzare $ maxs [0]

+4

Perfetto. Grazie! – Jeff

+1

Genial :) ..... –

+0

Come verificare se due valori sono uguali? – AlphaMale

1

Qualcosa del genere 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

Utilizzare meglio la chiave e il valore del primo elemento come valore predefinito. – 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() valori di ritorno:

Restituisce la chiave per l'ago se viene trovata 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 facoltativo.

-7

Funzione preso 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

+7

Per non parlare delle prestazioni. Foreaching attraverso array, il controllo del valore massimo ogni volta è anche peggio di "cattive pratiche". – bisko

+1

Ho menzionato che non è la mia implementazione. Era una copia/incolla veloce e sporca che ovviamente l'OP non poteva fare da solo, signore. –

+1

Non mentendo, mi hai fatto ridere un po '. Sei preoccupato per max() per ogni iterazione attraverso l'array? È "peggio di una cattiva pratica". No, non credo che lo sia. Non è il più elegante, ma funziona. – Sean

1

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

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

Lo so che è già una risposta, ma ecco una soluzione che trovo più elegante:

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

e voilà!

+0

il 'reset' non è necessario, btw. –

0

Altre risposte possono avere un codice più breve, ma questo dovrebbe essere il 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; 
} 
Problemi correlati