ตัวอย่าง: ฉันมีอาร์เรย์ที่มี 3 ค่า:
0 = 1
1 = 4
2 = 5
อยากได้เลขสุ่มแบบ.
$random = rand(1, 5);
แต่ฉันต้องได้ตัวเลขที่แตกต่างจากค่าอาร์เรย์ ฉันต้องการให้มันกลับมา 2 หรือ 3
ตัวอย่าง: ฉันมีอาร์เรย์ที่มี 3 ค่า:
0 = 1
1 = 4
2 = 5
อยากได้เลขสุ่มแบบ.
$random = rand(1, 5);
แต่ฉันต้องได้ตัวเลขที่แตกต่างจากค่าอาร์เรย์ ฉันต้องการให้มันกลับมา 2 หรือ 3
สิ่งนี้น่าจะเหมาะกับคุณ:
(ในที่นี้ ฉันจะสร้างช่วงที่คุณจะได้รับหมายเลขสุ่มด้วย range()
จากนั้น ฉันจะกำจัดตัวเลขเหล่านี้ซึ่งคุณไม่ต้องการด้วย array_diff()
และในตอนท้ายคุณสามารถใช้ array_rand()
เพื่อรับคีย์สุ่ม/ ตัวเลข)
<?php
$blacklist = [1, 4, 5];
$range = range(1, 5);
$randomArray = array_diff($range, $blacklist);
echo $randomArray[array_rand($randomArray, 1)];
?>
เอาท์พุท:
2 or 3
แก้ไข:
เพิ่งทำการวัดประสิทธิภาพและวิธีการที่มีการวนซ้ำช้ากว่าโค้ดด้านบนมาก!
ฉันสร้างอาร์เรย์ (บัญชีดำ) จาก 1...100'000 และอาร์เรย์ตัวเลขสุ่มจาก 1... 100'001
ดังนั้นสคริปต์นั้นควรสร้างตัวเลขสุ่มหนึ่งตัวเท่านั้น ด้วยวิธีการวนซ้ำ คุณได้รับข้อผิดพลาด:
ข้อผิดพลาดร้ายแรง: เกินเวลาดำเนินการสูงสุด 30 วินาที
และด้วยโค้ดที่โพสต์ด้านบนจะใช้เวลาโดยเฉลี่ย 1.5 วินาที