程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP不重復隨機數的生成方法

PHP不重復隨機數的生成方法

編輯:關於PHP編程

原理很簡單,先寫一個函數,生成0-z這36個字符中的一個。每次調用 getOptions() 方法生成一個字符,它們的存儲如下:array[0] = 0, array[1] = 1, ……, array[35] = z。

Array ( 
	[0] => 0 
	[1] => 1 
	[2] => 2 
	[3] => 3 
	[4] => 4 
	[5] => 5 
	[6] => 6 
	[7] => 7 
	[8] => 8 
	[9] => 9 
	[10] => a 
	[11] => b 
	[12] => c 
	[13] => d 
	[14] => e 
	[15] => f 
	[16] => g 
	[17] => h 
	[18] => i 
	[19] => j 
	[20] => k 
	[21] => l 
	[22] => m 
	[23] => n 
	[24] => o 
	[25] => p 
	[26] => q 
	[27] => r 
	[28] => s 
	[29] => t 
	[30] => u 
	[31] => v 
	[32] => w 
	[33] => x 
	[34] => y 
	[35] => z 
)

然後在0-35之間隨機生成一個數作為索引,其實就是在上面數組中隨機取出一個數,作為變量 $result 中的第一個字符。這個隨機索引隨後會被賦值成數組最後一個,它將不會參與下一輪的隨機選取。

<?php
// 生成0123456789abcdefghijklmnopqrstuvwxyz中的一個字符
function getOptions()
{
 	$options = array();
 	$result = array();
 	for($i=48; $i<=57; $i++)
 	{
     	array_push($options,chr($i));  
 	}
 	for($i=65; $i<=90; $i++)
  	{
      	$j = 32;
      	$small = $i + $j;
      	array_push($options,chr($small));
	}
 	return $options;
}
/*
$e = getOptions();
for($j=0; $j<150; $j++)
{
	echo $e[$j];
}
*/
$len = 10;
// 隨機生成數組索引,從而實現隨機數
for($j=0; $j<100; $j++)
{
 	$result = "";
 	$options = getOptions();
 	$lastIndex = 35;
 	while (strlen($result)<$len)
 	{
  		// 從0到35中隨機取一個作為索引
		$index = rand(0,$lastIndex);
		// 將隨機數賦給變量 $chr
  		$chr = $options[$index];
		// 隨機數作為 $result 的一部分
  		$result .= $chr;
  		$lastIndex = $lastIndex-1;
		// 最後一個索引將不會參與下一次隨機抽獎
  		$options[$index] = $options[$lastIndex];
 	}
 	echo $result."n";
}
?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved