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
)

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]


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.


12

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

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

dan voila!


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

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

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


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

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.