เอาค่าคะแนนมาเรียงลำดับ กรณีคะแนนเท่ากัน ได้อันดับเท่ากัน คะแนนรองมานับอันดับต่อจากอันดับก่อนหน้า

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา เอาค่าคะแนนมาเรียงลำดับ กรณีคะแนนเท่ากัน ได้อันดับเท่ากัน คะแนนรองมานับอันดับต่อจากอันดับก่อนหน้า

เอาค่าคะแนนมาเรียงลำดับ กรณีคะแนนเท่ากัน ได้อันดับเท่ากัน คะแนนรองมานับอันดับต่อจากอันดับก่อนหน้า

รวมคะแนนของแต่ละคนได้แล้ว และเรียงอันดับจากคะแนนสูงสุด-น้อยสุด ปรากฏว่าอันดับที่ 1 มีคนได้คะแนน 50 ทั้งหมด 3 คน ขอถามว่า
1. คนที่ได้คะแนน 50 คะแนนเท่ากัน อยากให้แสดงเป็นอันดับ 1 ทั้ง 3 คน 
2. คนที่ได้ลำดับถัดมาให้ แสดงอันดับที่ นับต่อจากจำนวนคนที่ได้อันดับ เท่ากันก่อนหน้า เช่น 
คะแนน 25 ได้อันดับ 4
คะแนน 15 ได้อันดับ 5
-------------------------------
หรือถ้า ได้คะแนน 50 คะแนน 2 อันดับแรก  ลำดับจะเรียงแบบนี้
ลำดับที่                ชื่อผู้สมัคร                หมายเลข                      ได้คะแนน
1                   ผู้สมัครคนที่ 1                       1                                 50
1                   ผู้สมัครคนที่ 2                       3                                 50
3                   ผู้สมัครคนที่ 3                       5                                  48
4                   ผู้สมัครคนที่ 4                        2                                 25 
5                   ผู้สมัครคนที่ 5                         4                                15 
 
ขอแนวทางหน่อยครับ ว่าจะเช็คค่าคะแนนอย่างไรกับค่าอันดับ 


Takabe 11-12-2020 13:45:41

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1
ดูตัวอย่างนี้เป็นแนวทาง
 
แบบที่ 1 
 
$scores = array(50,50,50,25,15);

$no = 0; // นับลำดับ
$chk_score = null; // เก็บคะนแนน และตรวจสอบ
foreach($scores as $score){
    // ถ้ายังไม่ได้เก็บคะแนน หรือ คะแนนที่ตรวจสอบไม่เท่ากับคะแนนเดิม ให้นับเพิ่ม
    if(is_null($chk_score) || $chk_score != $score){
        $chk_score = $score;
        $no++;
    }
    echo $no."\r\n";
}
 
ลำดับจะเป็น 1 1 1 2 3
 
แบบที่ 2
 
$scores = array(50,50,50,25,15);

$no = 0; // นับลำดับ
$no_real = 0;
$no_show = 0; // ลำดับที่จะแสดง
$chk_score = null; // เก็บคะนแนน และตรวจสอบ
foreach($scores as $score){
    $no_real++; // ลำดับจริงที่เพิ่มตลอด
    // ถ้ายังไม่ได้เก็บคะแนน หรือ คะแนนที่ตรวจสอบไม่เท่ากับคะแนนเดิม ให้นับเพิ่ม
    if(is_null($chk_score) || $chk_score != $score){
        $chk_score = $score;
        $no++;
        $no_show = $no_real;
    }else{
        $no_show = $no;
    }
    echo $no_show."\r\n";
}
 
ลำดับจะเป็น 1 1 1 4 5


ninenik 11-12-2020
 ความคิดเห็นที่ 2
ขอบคุณมากครับ


takabe 14-12-2020 16:17






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ