PHP高效生成一个不重复随机数
PHP生成一个随机数组的封装方法
/* * array unique_rand( int $min, int $max, int $num ) * 生成一定数量的不重复随机数 * $min 和 $max: 指定随机数的范围 * $num: 指定生成数量 */ function unique_rand($min, $max, $num) { //初始化变量为0 $count = 0; //建一个新数组 $return = array(); while ($count < $num) { //在一定范围内随机生成一个数放入数组中 $return[] = mt_rand($min, $max); //去除数组中的重复值用了“翻翻法”,就是用array_flip()把数组的key和value交换两次。这种做法比用 array_unique() 快得多。 $return = array_flip(array_flip($return)); //将数组的数量存入变量count中 $count = count($return); } //为数组赋予新的键名 shuffle($return); return $return; }
该方法以每次获取随机数存入数组再去重...效率低下...不想用
PHP高效产生m个n范围内的不重复随机数(m<=n)
注:在《 Programming Pearls 》一书中也有提到,题目为“如何高效产生m个n范围内的不重复随机数(m<=n)”
该算法非常巧妙的取随机数的位置(数组的下标),替代取随机数本身,每次取到一个随机数之后,就将其在取值范围中排除,下一次仅会在剩下的数字中取,一次遍历就可以完成随机数的选取,效率相当高。
function rand_num($num='200'){ for($i=0;$i<$num;$i++){ $n[$i] = $i; } for($i=0;$i<$num;$i++){ $rand = mt_rand($i,$num-1); //数组 随机数交换下标 if($n[$i] == $i){ $n[$i] = $n[$rand]; $n[$rand] = $i; } } }
1、第一步,为数组的每个数字按其下标顺序赋值,获得一个 $num 个数字键值对应顺序排列的数组。
2.第二步,开始取范围[ i,$num-1 ]范围内的随机数$rand,并将获取到的随机数$rand作为数组中当前位置 键i对应下标的值$rand,将数组中 键$rand对应下标的值替换为 i,这其实就是数组键值交叉互换。意义是,将已经生成的随机数在取值范围[ i,$num-1 ]中排除,下次会在剩下的数字中[ i+1,num-1 ]取值。
3.第三步,为避免重复取值,只在未改变的键值对中进行交替运算,即在原数组顺序排列 (键==值) 的位置进行交替运算。
4.结束。
如上图,获取10个随机数部分试例。
更多PHP相关问题请访问PHP中文网:PHP视频教程
Atas ialah kandungan terperinci PHP高效生成一个不重复随机数. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Cara menggunakan RANDBETWEEN untuk menjana nombor rawak dalam Excel Jika anda ingin menjana nombor rawak dalam julat tertentu, fungsi RANDBETWEEN ialah cara yang cepat dan mudah untuk melakukannya. Ini membolehkan anda menjana integer rawak antara mana-mana dua nilai pilihan anda. Jana nombor rawak dalam Excel menggunakan RANDBETWEEN: Klik sel yang anda mahu nombor rawak pertama muncul. Taip =RANDBETWEEN(1,500) menggantikan "1" dengan nombor rawak terendah yang anda ingin hasilkan dan "500" dengan

Bagaimana untuk mengoptimumkan prestasi penjanaan nombor rawak dalam pembangunan Java Nombor rawak digunakan secara meluas dalam sains komputer, terutamanya dalam kriptografi, simulasi, permainan dan bidang lain. Dalam pembangunan Java, kita sering perlu menjana nombor rawak untuk memenuhi pelbagai keperluan. Walau bagaimanapun, prestasi penjanaan nombor rawak sering menjadi salah satu kebimbangan pembangun. Artikel ini akan meneroka cara mengoptimumkan prestasi penjanaan nombor rawak dalam pembangunan Java. Kelas ThreadLocalRandom telah diperkenalkan dalam Java7 menggunakan kelas ThreadLocalRandom

Jana nombor rawak menggunakan bahasa Go Bahasa Go ialah bahasa pengaturcaraan moden, ringkas dan cekap yang menyediakan banyak perpustakaan terbina dalam untuk menjana nombor rawak. Antaranya, pakej crypto/rand menyediakan satu siri fungsi untuk menjana nombor rawak yang selamat. Dalam artikel ini, kami akan menjana nombor rawak dengan menggunakan fungsi Baca daripada pakej crypto/rand. Pertama, kita perlu mengimport pakej crypto/rand dan mencipta tatasusunan bait untuk menyimpan nombor rawak. Contoh kod adalah seperti berikut: packagemain

Cara menggunakan tatasusunan PHP untuk menjana nombor rawak dan kod pengesahan Nombor rawak dan kod pengesahan adalah sangat biasa semasa pembangunan tapak web dan aplikasi. PHP menyediakan pelbagai kaedah untuk menjana nombor rawak dan kod pengesahan. Artikel ini akan memperkenalkan cara menggunakan tatasusunan PHP untuk menjana nombor rawak dan kod pengesahan, dengan contoh kod yang sepadan. 1. Hasilkan nombor rawak Dalam PHP, kita boleh menggunakan fungsi rand() untuk menjana nombor rawak. Fungsi rand() memerlukan dua parameter, nilai minimum dan nilai maksimum. Kod sampel adalah seperti berikut: $min=1;$maks=

Cara mengelak daripada menjana nombor rawak pendua di Golang: Cipta penjana nombor rawak baharu rand.New(rand.Source). Gunakan rand.NewSource(time.Now().UnixNano()) sebagai sumber entropi. Gunakan rand.Intn(n) untuk menjana integer rawak.

Bagaimana untuk menggunakan kaedah Random.nextInt() untuk menjana nombor rawak dalam Java? Nombor rawak digunakan secara meluas dalam sains komputer dan boleh digunakan untuk menjana kata laluan, peristiwa rawak dalam permainan, persampelan rawak dalam sains data, dsb. Java menyediakan kelas Rawak untuk menjana nombor rawak, dan kaedah nextInt() boleh digunakan untuk menjana integer rawak. Di bawah saya akan memperkenalkan cara menggunakan kaedah Random.nextInt() untuk menjana nombor rawak dan memberikan contoh kod tertentu. Pertama, kita perlukan

Terokai kaedah dan aplikasi NumPy untuk menjana nombor rawak Pengenalan: Nombor rawak digunakan secara meluas dalam sains komputer dan statistik, seperti eksperimen simulasi, penjanaan data dan pemilihan ciri. Dalam Python, perpustakaan NumPy (NumericalPython) ialah perpustakaan pengkomputeran berangka yang berkuasa yang menyediakan banyak fungsi untuk menjana nombor rawak. Artikel ini akan meneroka kaedah penjanaan nombor rawak dalam NumPy dan memberikan contoh kod khusus. 1. Fungsi penjanaan nombor rawak NumPy disediakan oleh NumPy

Dalam artikel ini, kita akan menyelidiki isu yang menarik dan praktikal yang berkaitan dengan manipulasi rentetan dalam pengaturcaraan C. Kami akan membina "penjana kata laluan rawak" dalam C. Soalan ini bukan sahaja akan meningkatkan pemahaman anda tentang operasi rentetan tetapi juga meningkatkan pengetahuan anda tentang perpustakaan standard C. Tugas penyataan masalah adalah untuk membina program yang menjana kata laluan rawak dengan panjang yang ditentukan. Kata laluan hendaklah mengandungi huruf besar dan kecil, nombor dan aksara khas. Pendekatan Penyelesaian C Untuk menyelesaikan masalah ini, kami akan memanfaatkan kuasa perpustakaan standard C. Kami akan menggunakan fungsi rand() untuk menjana nombor rawak dalam julat yang ditentukan. Kami akan mencipta rentetan yang mengandungi semua aksara yang mungkin mengandungi kata laluan, dan kemudian untuk setiap aksara dalam kata laluan, kami akan memilih satu secara rawak daripada rentetan ini
