คอมพิวเตอร์ Windows อินเทอร์เน็ต

การใช้ฟังก์ชันสุ่ม PHP การเลือกแบบสุ่มจากอาร์เรย์ใน php php สุ่มจำนวนเต็ม

คุณสามารถใช้ฟังก์ชัน rand () หรือ mt_rand () ของ PHP เพื่อสร้างตัวเลขสุ่ม ความต้องการใช้ตัวเลขสุ่มมักเกิดขึ้นในทางปฏิบัติสำหรับการตั้งชื่อตัวแปร ไฟล์ การสร้างข้อมูลคีย์ และการรับรองความปลอดภัย

ความบังเอิญและความเป็นเอกลักษณ์

ฟังก์ชันสุ่มของ PHP มาในสองรสชาติ: rand () และ mt_rand () เชื่อกันว่าอัลกอริทึมในกรณีแรกนั้นง่ายกว่าและสร้างตัวเลขสุ่มหลอก ตัวเลือกที่สองมีอัลกอริธึมที่เร็วกว่าและเป็นที่รู้จัก ลักษณะทางคณิตศาสตร์... ในกรณีส่วนใหญ่ เมื่อคุณต้องการรับหมายเลขสุ่ม คุณสามารถใช้ชุดของการโทรแบบสุ่ม PHP และรับชุดค่าผสมที่ไม่ซ้ำกันของตัวเลขได้

หากคุณนำตัวเลขตั้งแต่ 1 ถึง 26 หรือตั้งแต่ 1 ถึง 32 มาเป็นพื้นฐานและนำมาสุ่ม คุณสามารถสร้างข้อมูลสำคัญเป็นลำดับของตัวอักษรละตินหรือซิริลลิก ในกรณีนี้ PHP random เป็นวิธีการสร้างลำดับของข้อมูลที่เป็นตัวอักษร ตัวอย่างเช่น สำหรับการทดสอบช่องทางการสื่อสารหรืออัลกอริธึม

จำนวนสุ่มมักจะไม่ซ้ำกัน เนื่องจากสามารถปรากฏได้หลายครั้งตามกฎการกระจายของตัวแปรสุ่ม แต่ถ้าเรารวม static . โดยเฉพาะ ตัวแปร PHP& Math.random ของ JavaScript คุณจะได้รับหมายเลขสุ่มที่ไม่ซ้ำใครจริง ๆ ซึ่งจะไม่เกิดซ้ำเมื่อเวลาผ่านไป

การใช้ฟังก์ชันเวลา

ฟังก์ชันของเวลาทั้ง PHP และ JavaScript ช่วยให้คุณสร้างชุดค่าผสมของตัวเลขที่ไม่ซ้ำกัน ซึ่งแทบจะไม่เกิดขึ้นเมื่อเหตุการณ์จำนวนมากเพียงพอสามารถเกิดขึ้นได้ ณ จุดหนึ่งและ ค่าสุ่มจะถูกทำซ้ำ

ด้วยการใช้ PHP แบบสุ่มในช่วงวินาทีหรือมิลลิวินาทีกับค่าที่เป็นไปได้ที่หลากหลาย คุณจะได้รับชุดค่าผสมแบบสุ่มของตัวเลขหรือตัวอักษรที่ไม่ซ้ำกัน อะไรอีก?

รวมค่าของฟังก์ชันเวลา ตัวเลขที่เพิ่มขึ้นตามลำดับและ PHP แบบสุ่ม หรือคุณสามารถรับรองความปลอดภัยที่เชื่อถือได้ของช่องทางการสื่อสารของไคลเอ็นต์และเซิร์ฟเวอร์ สร้าง รหัสเฉพาะสำหรับตัวแปร ให้สร้างเหตุการณ์ที่คาดเดาไม่ได้ในอัลกอริทึม

ตัวสร้างตัวเลขสุ่ม PHP เป็นโซลูชั่นที่ยอดเยี่ยมสำหรับงานส่วนใหญ่ โดยเฉพาะอย่างยิ่งเมื่อคุณต้องการผลลัพธ์คุณภาพสูงอย่างรวดเร็วโดยมีค่าใช้จ่ายน้อยที่สุด การใช้ฟังก์ชัน rand () และ mt_rand ร่วมกับชุดตัวเลขหรือค่าเวลาที่เพิ่มขึ้นตามลำดับทำให้คุณได้ตัวเลขสุ่ม ทั้งค่าที่ซ้ำกันและไม่ซ้ำกัน

สวัสดีทุกคน! ในบทความนี้เราจะมาดูที่ มีอะไรใหม่ในการสร้างตัวเลขสุ่มใน PHP 7.1.

การอัปเดตนี้เกิดขึ้นกับนักพัฒนาอย่างล่องหน แต่ปรับปรุงภาษาการเขียนโปรแกรม PHPในด้านการสร้างตัวเลขสุ่ม

เท่าที่ทราบใน PHPเราสามารถใช้ฟังก์ชั่น แรนด์ (ต่ำสุด สูงสุด)เพื่อสร้างตัวเลขสุ่ม:

ก้องแรนด์ (7, 17);

หากคุณรีเฟรชหน้าตอนนี้ คุณจะได้รับหมายเลขสุ่มใหม่ทุกครั้ง

แต่ไม่ใช่ทุกอย่างจะง่ายอย่างที่คิด ประเด็นก็คือขึ้นอยู่กับสิ่งที่คุณสร้างตัวเลขสุ่มสำหรับ ฟังก์ชัน แรนด์ ()ใช้ ระบบต่างๆรุ่น. เหล่านั้น. ขึ้นอยู่กับระบบที่ใช้ ระบบบางระบบสามารถใช้วิธีการสร้างที่อ่อนแอ ตามลำดับ คุณจะไม่ได้รับตัวเลขสุ่มทั้งหมด

วี PHP 7.1ปัญหานี้ได้รับการแก้ไขแล้วและได้เพิ่มฟังก์ชันแล้ว mt_rand ():

ก้อง mt_rand (7, 17);

คุณลักษณะนี้ทำงานได้ดีขึ้นมาก รวมถึงการรักษาความปลอดภัย สิ่งสำคัญคือต้องรู้ด้วยว่าถ้าคุณใช้ฟังก์ชัน แรนด์ ()วี PHP 7.1จากนั้นจะถูกเขียนทับโดยอัตโนมัติไปยัง mt_rand ()... เหล่านั้น. แรนด์ ()ตอนนี้เป็นเพียงนามแฝงสำหรับ mt_rand ().

ฟังก์ชันอื่นๆ มากมายสำหรับการรับผลลัพธ์แบบสุ่มได้รับการปรับปรุงใน PHP 7.1... ตัวอย่างเช่น มาดูกันว่าเราจะได้รับค่าสุ่มจากอาร์เรย์ได้อย่างไร:

$ names = ["อีวาน", "อเล็กซานเดอร์", "วาซิลี"];
ก้อง $ ชื่อ;

เหล่านั้น. ฟังก์ชันใด ๆ เช่นนี้ได้รับการปรับปรุงเพื่อให้ได้ตัวเลขสุ่มที่มีคุณภาพดีขึ้นใน PHP 7.1... ใช่ การอัปเดตนี้ไม่มีใครสังเกตเห็น แต่ไม่ว่าคุณจะเขียนภาษาอะไร สิ่งสำคัญมากคือต้องทำความเข้าใจว่าเกิดอะไรขึ้นภายในฟังก์ชันและลักษณะการทำงาน

งาน
คุณต้องสร้างตัวเลขสุ่มภายในช่วงตัวเลข

สารละลาย
นี่คือสิ่งที่ฟังก์ชัน mt_rand () ใช้สำหรับ:

// ตัวเลขสุ่มระหว่าง $ บนและ $ ต่ำกว่า รวม
$ random_number = mt_rand (ต่ำกว่า $, $ บน);

การอภิปราย
การสร้างตัวเลขสุ่มมีประโยชน์เมื่อคุณต้องการแสดงรูปภาพแบบสุ่ม สุ่มกำหนดจุดเริ่มต้นในเกม เลือกรายการแบบสุ่มจากฐานข้อมูล หรือสร้าง ตัวระบุที่ไม่ซ้ำการประชุม. ในการสร้างตัวเลขสุ่มระหว่างจุดสองจุด คุณต้องส่งสองอาร์กิวเมนต์ไปยังฟังก์ชัน mt_rand ()

$ random_number = mt_rand (1, 100);

การเรียก mt_rand () โดยไม่มีอาร์กิวเมนต์จะคืนค่าตัวเลขระหว่างศูนย์และจำนวนสุ่มสูงสุดที่ส่งคืนโดย mt_getrandmax () เป็นเรื่องยากสำหรับคอมพิวเตอร์ที่จะสร้างตัวเลขสุ่มอย่างแท้จริง เขาปฏิบัติตามคำแนะนำอย่างเป็นระบบได้ดีกว่ามาก และไม่เก่งในเรื่องการกระทำที่เกิดขึ้นเองซึ่งจำเป็นสำหรับเขา หากคุณต้องการบังคับให้คอมพิวเตอร์สร้างตัวเลขสุ่ม คุณจะต้องให้ชุดคำสั่งที่ทำซ้ำได้ ในขณะที่การทำซ้ำจริง ๆ จะทำให้ความสำเร็จของการสุ่มมีโอกาสน้อยลง

PHP มีตัวสร้างตัวเลขสุ่มสองแบบที่แตกต่างกัน: ฟังก์ชันคลาสสิกที่เรียกว่า rand () และฟังก์ชัน mt_rand () ขั้นสูง

MT (Mersenne Twister) เป็นเครื่องกำเนิดตัวเลขสุ่มหลอกที่ตั้งชื่อตามพระสงฆ์และนักคณิตศาสตร์ชาวฝรั่งเศส Marin Mersenne ที่ศึกษาจำนวนเฉพาะ อัลกอริธึมของตัวสร้างนี้ขึ้นอยู่กับจำนวนเฉพาะเหล่านี้ ฟังก์ชัน mt_rand () เร็วกว่าฟังก์ชัน rand () และสร้างตัวเลขสุ่มได้มากกว่า ดังนั้นเราจึงชอบฟังก์ชันเดิมมากกว่า

หากเวอร์ชัน PHP ของคุณเก่ากว่า 4.2 ก่อนเรียกใช้ฟังก์ชัน mt_rand () (หรือ rand ()) เป็นครั้งแรก คุณต้องเริ่มต้นตัวสร้างด้วยค่าเริ่มต้นโดยเรียก mt_srand () (หรือ srand ()) การทำงาน. เมล็ดคือตัวเลขที่ฟังก์ชันสุ่มใช้เป็นพื้นฐานในการสร้างตัวเลขสุ่มที่ส่งกลับ มันหมายถึงวิธีการแก้ไขภาวะที่กลืนไม่เข้าคายไม่ออกข้างต้น - การซ้ำซ้อนกับการสุ่ม

เนื่องจากค่าเริ่มต้นที่เปลี่ยนแปลงอย่างรวดเร็วและมีโอกาสเกิดซ้ำได้ต่ำ (คุณสมบัติเหล่านี้ควรกำหนดลักษณะค่าเริ่มต้นที่ดี) คุณสามารถใช้ค่าที่ส่งคืนโดยฟังก์ชันเวลาที่มีความแม่นยำสูง microtime () การเริ่มต้นเครื่องกำเนิดไฟฟ้าเพียงครั้งเดียวก็เพียงพอแล้ว PHP 4.2 และใหม่กว่าจัดการการเริ่มต้นโดยอัตโนมัติ แต่ถ้าค่าเริ่มต้นถูกตั้งค่าด้วยตนเองก่อนการเรียก mt_rand () ครั้งแรก ดังนั้น PHP จะไม่แทนที่ด้วยค่าเริ่มต้นของตัวเอง

หากคุณต้องการเลือกระเบียนแบบสุ่มจากฐานข้อมูล วิธีที่ง่ายที่สุดคือกำหนดจำนวนเขตข้อมูลทั้งหมดในตารางก่อน เลือกตัวเลขสุ่มจากช่วงนี้ แล้วสอบถามแถวนี้จากฐานข้อมูล:

$ sth = $ dbh-> query ("เลือก COUNT (*) AS นับจากเครื่องหมายคำพูด");
ถ้า ($ row = $ sth-> fetchRow ()) (
$ นับ = $ แถว;
) อื่น (
ตาย ($ row-> getMessage ());
}
$ สุ่ม = mt_rand (0, $ นับ - 1);
$ sth = $ dbh-> แบบสอบถาม ("เลือกใบเสนอราคาจากราคา LIMIT $ สุ่ม 1");
ในขณะที่ ($ row = $ sth-> fetchRow ()) (
พิมพ์ $ แถว

"\ NS";
}

ข้อมูลโค้ดนี้กำหนดจำนวนแถวทั้งหมดในตาราง สร้างตัวเลขสุ่มจากช่วงนั้น จากนั้นใช้ LIMIT $ สุ่ม 1 เพื่อเลือกหนึ่งแถวจากตาราง โดยเริ่มต้นที่ $ แบบสุ่ม ใน MySQL เวอร์ชัน 3.23 หรือสูงกว่า อาจมีทางเลือกอื่น:

$ sth = $ dbh-> query ("เลือกใบเสนอราคาจากใบเสนอราคา ORDER BY RAND () LIMIT 1");
ในขณะที่ ($ row = $ sth-> fetchRow ()) (
พิมพ์ $ แถว "\ NS";
}

ในกรณีนี้ MySQL จะสุ่มแถวก่อนแล้วจึงคืนค่าแถวแรก

ฉันเคยถูกถามมาแล้วสองสามครั้งว่าทำอย่างไร ผลลัพธ์แบบสุ่มของเครื่องหมายคำพูดบนเว็บไซต์ของฉันในบล็อก " คำพูดที่ชาญฉลาด" นอกจากนี้ ฉันพบว่าปัญหาที่นี่คือการขาดความเข้าใจของผู้คน วิธีอนุมานองค์ประกอบสุ่มจากอาร์เรย์ใน php... งานนั้นเรียบง่าย แต่อย่างไรก็ตามเนื่องจากมีคำถามเกิดขึ้น คุณต้องตอบคำถามเหล่านั้น

ฉันจะให้รหัสกับคุณทันที สมมติว่ามีอาร์เรย์ที่มีชุดเครื่องหมายคำพูด และคุณต้องเลือกหนึ่งสุ่มและผลลัพธ์:

$ เครื่องหมายคำพูด = อาร์เรย์ (); // เริ่มต้นอาร์เรย์ว่าง
$ quotes = "จงใส่ใจกับความคิดของคุณ มันเป็นจุดเริ่มต้นของการกระทำ"; // คำพูดแรก
$ quotes = "ไม่ใช่คนฉลาดหรือแข็งแกร่งที่สุดที่อยู่รอด แต่เป็นคนที่อ่อนไหวต่อการเปลี่ยนแปลงมากที่สุด"; // คำพูดที่สอง
$ quotes = "ชีวิตคือภูเขา: คุณขึ้นช้า ๆ ลงอย่างรวดเร็ว"; // คำพูดที่สาม
$ quotes = "คนไม่อยากรวย แต่คนอยากรวยกว่าคนอื่น"; // คำพูดที่สี่
$ number = mt_rand (0, นับ ($ quotes) - 1); // นำตัวเลขสุ่มจาก 0 ถึง (ความยาวอาร์เรย์ลบ 1) รวม
คำพูดสะท้อน $ [$ หมายเลข]; // แสดงใบเสนอราคา
?>

ช่วงเวลาสำคัญ- นี่คือ ได้เลขสุ่ม... สิ่งที่คุณต้องทำคือกำหนดขอบเขตที่ถูกต้อง หากคุณต้องการเลือกองค์ประกอบแบบสุ่มตลอดความยาวของอาร์เรย์ นี่คือจาก 0 ก่อน ( ความยาวอาร์เรย์ลบ 1). แล้วก็ ดึงองค์ประกอบออกจากอาร์เรย์ด้วยดัชนีสุ่มผลลัพธ์.

สำหรับงานที่มีเครื่องหมายคำพูด ควรเก็บไว้ในฐานข้อมูล โดยหลักการแล้วหากเว็บไซต์เรียบง่ายมากก็เป็นไปได้ใน ไฟล์ข้อความ... แต่ถ้าอยู่ในฐานข้อมูลก็ใช้ดีกว่า แรนด์ ()และ LIMITวี แบบสอบถาม SQLเพื่อให้คุณได้ใบเสนอราคาแบบสุ่มจากฐานข้อมูลทันที