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.