Bir dizideki en yüksek değerin dönüş dizini


92

Aşağıdakine benzer bir şeye benzeyen bir diziden dizideki en yüksek değerin dizinini nasıl alabilirim. Aşağıdaki dizi için istenen sonuç '11' olacaktır.

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

Bir süredir, ancak diziniz zaten sıralanmış görünüyor (azalan); ya bu kötü bir örnek ya da gerçekten ihtiyacınız var reset($arr); echo key($arr);:)
Ja͢ck

Yanıtlar:


209

Benim çözümüm:

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

Not:
Bu şekilde,belirli bir maksimum değere ilişkin her anahtarı alabilirsiniz.

Eğer sadece ilgilenen varsa tümü arasında bir anahtarla sadece kullanım $ maxs [0]


İki değerin aynı olup olmadığını nasıl görebilirim?
AlphaMale

çiftler varsa iki veya daha fazla değere sahipse sonucu kontrol edebilirsiniz
Julio Popócatl

@AlphaMale iki anahtarı kastediyorsunuz, çünkü maksimum değer tanım gereği yalnızca birdir .. @JustinE, yinelenen anahtarlar istemiyorsanız, sadece maksimumda arayın (yani kaçın array_keys) ve maksimuma karşılık gelen yalnızca bir anahtar elde edersiniz değer
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 () dönüş değerleri:

Dizide bulunursa iğne anahtarını, aksi takdirde FALSE değerini döndürür.

Eğer iğne samanlıkta birden fazla bulunursa, eşleşen ilk anahtar döndürülür. Eşleşen tüm değerlerin anahtarlarını döndürmek için, bunun yerine isteğe bağlı search_value parametresiyle array_keys () kullanın.


12

Zaten cevaplandığını biliyorum ama işte daha zarif bulduğum bir çözüm:

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

ve voila!


4
resetBtw, gerekli değildir.
kuroi neko

3

Diğer cevaplar daha kısa kodlara sahip olabilir, ancak bu en verimli ve anlaşılması kolay olmalıdır.

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

Bunun gibi bir şey hile yapmalı

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
Varsayılan değer olarak ilk öğenin anahtarını ve değerini daha iyi kullanın.
Gumbo

1

Daha yüksek anahtarı almak için çözümüm aşağıdaki gibidir:

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

Http://www.php.net/manual/en/function.max.php adresinden alınan işlev

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

Tıkır tıkır çalışıyor


8
Performans hakkında konuşmamak. Dizide ilerlemek, her seferinde maksimum değeri kontrol etmek "kötü uygulamadan" daha kötüdür.
bisko

1
Benim uygulamam olmadığını söyledim. OP'nin kendi başına yapamadığı, hızlı ve kirli bir kopyala / yapıştırdı, bayım.
Timur Asaliev

3
Yalan söylemeyeceğim, beni biraz kıkırdattın. Dizi boyunca her yineleme için max () konusunda endişeli misiniz? "Kötü uygulamadan daha kötü". Hayır, olduğuna inanmıyorum. En zarif değil ama işe yarıyor.
Sean
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.