วิธีการสุ่มรายชื่อ php ไม่ให้ซ้ำกัน

แชร์ประสบการณ์เขียนโค้ด php + Mysql เล็ก ๆ น้อย ๆ เผื่อจะเป็นประโยชน์กับใครสักคน...
 
การสุ่มตัวเลข หรือ ตัวอักษร แบบไม่ให้ซ้ำกันในแ่ต่ละรอบนี้ คิดว่าคงจะได้เจอะเจอกันอย่างแน่นอน สมัยเรียนผมเองก็เจอมาเหมือนกันครับ อาจารย์ให้ทำโค้ดระบบสุ่ม หรือ Random ตัวเลขสิบตัว 0 - 9 โดย loop ทั้งหมดสิบรอบ ให้แต่ละรอบตัวเลขผลลัพธ์ต้องออกมาไม่ซ้ำกัน คือ เขาสอนเกี่ยวกับโครงสร้างข้อมูลแบบลำดับมาแล้ว ( data structure) ก็ให้เราทำซะงั้น สรุปว่าทั้งห้องไม่มีใครทำได้เลย อาจารย์ก็มาเฉลยวิธีการให้ ประมาณนี้ครับ 
  1. สุ่มตัวเลขมา 1 ตัว
  2. เก็บตัวเลขที่สุ่มได้ ใส่ไว้่ในตัวแปร array จากนั้นก็ทำการสุ่มตัวเลขรอบใหม่
  3. เอาตัวเลขใหม่ที่สุ่มได้ ไปเช็คกับตัวเลขที่มีใน array ว่ามีหรือยัง ถ้ายังไม่มีก็เพิ่มตัวเลขที่สุ่มได้เข้าไปเก็บไว้ใน array แต่ถ้ามีอยู่แล้ว ก็ทำการสุ่มตัวเลขใหม่ loop จนได้ค่าทั้งหมด (ซึ่งไม่รู้ว่าทั้งหมดมันกี่รอบ)
  4. เมื่อได้ค่าไม่ซ้ำครบแล้วก็ทำการแสดงผลค่าใน array ออกมา
คิดดูสิครับว่านักเรียนโปรแกรมมือใหม่อย่างเรา ๆ ใครจะไปคิดและทำได้ขนาดนั้น
อย่างมากที่คิดได้ตอนนั้นก็ใช้ if เช็คว่าตัวนี้มีหรือยังแค่นั้นหล่ะ
 
จนเรียนจบออกมาผมเองก็ยังติดใจไอ้ระบบสุ่มตัวเลขนี้ไม่หาย มันน่าจะมีวิธีที่ทำได้ง่าย ๆ สิน่า
อันนี้ไม่เอาฟังก์ชั่นสำเร็จรูปนะครับ เอาแบบคิดเอง สร้างเองประมาณนั้น ก็เลยมาลองเขียนเล่น ๆ ดู ก็ได้ผลเป็นที่น่าพอใจแบบนี้ครับ
 
สุ่มตัวเลขแบบไม่ซ้ำ
 
สุ่มตัวหนังสือ หรือ ตัวอักษาไทยก็ได้อังกฤษก็ได้นะครับ แบบไม่ซ้ำกันเลย
 
โค้ด php random สุ่มไม่ซ้ำ
 
<?php
for($a==1;$a<10;$a++){
// จำนวนรอบที่ต้องการทดสอบ หรือ สุ่ม
        $number='0123456789'; // ตัวแปรตัวเลข ที่จะเอาไปสุ่ม
        //$number="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // ตัวแปรแบบตัวอักษรภาษาอังกฤษ ที่จะเอาไปสุ่ม
        
        for($i==1;$i<5;$i++){
// จำนวนหลักที่ต้องการสามารถเปลี่ยนได้ตามใจชอบนะครับ จาก 5 เป็น 3 หรือ 6 หรือ 10 เป็นต้น
                $random=rand(0,strlen($number)-1); //สุ่มตัวเลข
                $cut_txt=substr($number,$random,1); //ตัดตัวเลข หรือ ตัวอักษรจากตำแหน่งที่สุ่มได้มา 1 ตัว
                $result.=substr($number,$random,1); // เก็บค่าที่ตัดมาแล้วใส่ตัวแปร
                $number=str_replace($cut_txt,'',$number); // ลบ หรือ แทนที่ตัวอักษร หรือ ตัวเลขนั้นด้วยค่า ว่าง
        }
        
        $i=0;
// ตั้งค่าให้ $i ใหม่ เริ่มต้นที่ 0
        echo $result."<br>"; // แสดงค่าและขึ้นบรรทัดใหม่
        $result=''; // ล้างค่าตัวแปรออก เพื่อรับค่าใหม่ในรอบต่อไป
}
?>
 
หลักการหรือวิธีการก็ง่าย ๆครับ ไม่ยุ่งยากอะไรเลย โดยเราจะเก็บค่าที่ต้องการจะเอามาสุ่ม (ตัวเลข หรือ ตัวอักษร) ไว้ในตัวแปรก่อนนะครับ จากนั้นก็
  1. สุ่มตัวเลข สมมุติรอบแรกสุ่มได้ 5 นะครับ
  2. ทำการตัดตัวเลขลำดับที่ 5 มา 1 ตัว
  3. เก็บค่าที่ตัดมาได้ไว้ในตัวแปรสำหรับเอาไปใช้งาน
  4. ตัด หรือ ลบ ตัวเลขตัวนั้นออกจากตัวแปร จากสมาชิกในตัวแปรที่มี 10 ตัว ก็จะเหลือแค่ 9 ตัว รอบต่อไปสุ่มยังไงก็ไม่ซ้ำแน่นอน (ก็เราตัดตัวนั้นออกไปแล้วนี่...อิอิ)
ก็จะได้ผลลัพธ์ตามที่เราต้องการครับ สามารถเอาไปประยุกต์เพื่อใ้ช้งานต่อได้ ไม่ว่าจะเป็นการยืนยันตัวตน ตามที่เห็นตามเว็บทั่ว ๆ ไป ที่ก่อนโพสต้องกรอกระหัสยืนยันนะครับ หรือ จะเอาไปใช้งานอย่างอื่น ๆ ก็แล้วแต่สถาณการณ์ครับ
 
โค้ดด้านบนนี้ทำงานได้เร็วมาก เนื่องจากแต่ละรอบจะได้ตัวเลขที่ไม่ซ้ำออกมาเลย ลองเอาไปเทสกันดูนะครับ หากสงสัยตรงไหนก็ฝากข้อความไว้ได้เลยครับผม...


My Article
แนะนำเว็บสูตรหวยออนไลน์ ดูฟรี