Kembalikan indeks dengan nilai tertinggi dalam sebuah array

92

Dari array yang terlihat seperti berikut, bagaimana saya bisa mendapatkan indeks nilai tertinggi dalam array. Untuk larik di bawah ini, hasil yang diinginkan adalah '11'.

Array (
    [11] => 14
    [10] => 9
    [12] => 7
    [13] => 7
    [14] => 4
    [15] => 6
)
Jeff
sumber
Sudah lama, tetapi array Anda sepertinya sudah diurutkan (menurun); baik itu contoh yang buruk atau Anda benar-benar hanya perlu reset($arr); echo key($arr);:)
Ja͢ck

Jawaban:

209

Solusi saya adalah:

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

Catatan:
dengan cara ini Anda dapat mengambil setiap kunci yang terkait dengan nilai maks yang diberikan.

Jika Anda hanya tertarik pada satu kunci di antara semua, cukup gunakan $ maxs [0]

drAlberT
sumber
Bagaimana cara mengetahui apakah dua nilai sama?
AlphaMale
Anda dapat memeriksa hasilnya jika memiliki dua atau lebih nilai jika memiliki duplikat
Julio Popócatl
@AlphaMale maksud Anda dua kunci, saya kira, karena nilai maks hanya satu menurut definisi .. @JustinE jika Anda tidak ingin kunci duplikat cukup cari kunci maks (yaitu hindari array_keys) dan Anda hanya akan mendapatkan satu kunci yang sesuai dengan maks nilai
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 () mengembalikan nilai:

Mengembalikan kunci untuk jarum jika ditemukan dalam larik, FALSE sebaliknya.

Jika jarum ditemukan di tumpukan jerami lebih dari sekali, kunci pertama yang cocok dikembalikan. Untuk mengembalikan kunci untuk semua nilai yang cocok, gunakan array_keys () dengan parameter search_value opsional.

Andrejs Cainikovs
sumber
12

Saya tahu ini sudah terjawab tetapi berikut adalah solusi yang menurut saya lebih elegan:

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

dan voila!

David 天宇 Wong
sumber
4
yang resettidak perlu, btw.
kuroi neko
3

Jawaban lain mungkin memiliki kode yang lebih pendek tetapi yang ini harus paling efisien dan mudah dipahami.

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

Sesuatu seperti ini seharusnya berhasil

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
sumber
3
Lebih baik gunakan kunci dan nilai item pertama sebagai nilai default.
Gumbo
1

Solusi saya untuk mendapatkan kunci yang lebih tinggi adalah sebagai berikut:

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

Fungsi diambil dari 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)));

Bekerja seperti pesona

Timur Asaliev
sumber
8
Belum lagi kinerja. Meneruskan melalui array, memeriksa nilai maks setiap kali bahkan lebih buruk daripada "praktik buruk".
bisko
1
Saya sebutkan ini bukan implementasi saya. Itu adalah copy / paste cepat dan kotor yang OP jelas tidak bisa lakukan sendiri, mister.
Timur Asaliev
3
Tidak akan berbohong, kamu membuatku tertawa kecil. Anda khawatir tentang max () untuk setiap iterasi melalui array? Ini "lebih buruk dari praktik buruk". Tidak, saya tidak percaya itu. Ini bukan yang paling elegan, tapi berhasil.
Sean