ส่งกลับดัชนีของค่าสูงสุดในอาร์เรย์


92

จากอาร์เรย์ที่มีลักษณะดังต่อไปนี้ฉันจะรับดัชนีที่มีค่าสูงสุดในอาร์เรย์ได้อย่างไร สำหรับอาร์เรย์ด้านล่างผลลัพธ์ที่ต้องการคือ '11'

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

เป็นเวลานานแล้ว แต่อาร์เรย์ของคุณดูเหมือนจะเรียงลำดับแล้ว (จากมากไปหาน้อย) อาจเป็นตัวอย่างที่ไม่ดีหรือคุณแค่ต้องการreset($arr); echo key($arr);:)
Ja͢ck

คำตอบ:


209

ทางออกของฉันคือ:

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

หมายเหตุ:
วิธีนี้คุณสามารถดึงข้อมูลที่สำคัญทุกคนที่เกี่ยวข้องกับการกำหนดค่าสูงสุด

หากคุณสนใจเพียงคีย์เดียวจากทั้งหมดให้ใช้$ maxs [0]


วิธีดูว่าค่าสองค่าเหมือนกันหรือไม่?
AlphaMale

คุณสามารถตรวจสอบผลลัพธ์ได้ว่ามีค่าตั้งแต่สองค่าขึ้นไปหากมีรายการที่ซ้ำกัน
Julio Popócatl

@AlphaMale คุณหมายถึงสองคีย์ฉันคิดว่าเนื่องจากค่าสูงสุดเป็นเพียงหนึ่งเดียวตามคำจำกัดความ .. @JustinE หากคุณไม่ต้องการให้คีย์ซ้ำเพียงแค่ค้นหาค่าสูงสุด (เช่นหลีกเลี่ยงarray_keys) และคุณจะได้รับเพียงหนึ่งคีย์ที่ตรงกับค่าสูงสุด มูลค่า
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 () ส่งคืนค่า:

ส่งคืนคีย์สำหรับเข็มหากพบในอาร์เรย์มิฉะนั้นจะเป็นเท็จ

หากพบเข็มในกองหญ้ามากกว่าหนึ่งครั้งคีย์แรกที่ตรงกันจะถูกส่งคืน หากต้องการส่งคืนคีย์สำหรับค่าที่ตรงกันทั้งหมดให้ใช้ array_keys () กับพารามิเตอร์ search_value ที่เป็นทางเลือกแทน



3

คำตอบอื่น ๆ อาจมีรหัสที่สั้นกว่า แต่คำตอบนี้ควรมีประสิทธิภาพมากที่สุดและเข้าใจง่าย

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

สิ่งนี้ควรทำเคล็ดลับ

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
ควรใช้คีย์และค่าของรายการแรกเป็นค่าเริ่มต้น
Gumbo

1

วิธีแก้ปัญหาของฉันในการรับคีย์ที่สูงขึ้นมีดังนี้:

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

ฟังก์ชันนำมาจาก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)));

ใช้งานได้เหมือนมีเสน่ห์


8
ไม่ต้องพูดถึงประสิทธิภาพ การมองผ่านอาร์เรย์การตรวจสอบค่าสูงสุดทุกครั้งจะแย่ยิ่งกว่า "การปฏิบัติที่ไม่ดี"
bisko

1
ฉันพูดถึงมันไม่ใช่การใช้งานของฉัน มันเป็นการคัดลอก / วางที่รวดเร็วและสกปรกจนเห็นได้ชัดว่า OP ไม่สามารถทำเองได้
Timur Asaliev

3
จะไม่โกหกคุณทำให้ฉันหัวเราะเล็กน้อย คุณกังวลเกี่ยวกับ max () สำหรับการวนซ้ำแต่ละครั้งผ่านอาร์เรย์หรือไม่? "เลวร้ายยิ่งกว่าการปฏิบัติที่ไม่ดี" ไม่ฉันไม่เชื่อว่ามันเป็น มันไม่ได้หรูหราที่สุด แต่ใช้งานได้
Sean
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.