深思 PHP 數組遍歷的差異(array_diff 的實現)284278詳解
前兩天看到有人要編個考試系統,當時隻是簡單回瞭下用隨機函數RND
實際一般需要從數據庫中隨機提取N道題目。
以下代碼都基於VBS;
通常的編寫類似這樣的
‘產生不重復隨機數 for j=0 to i-1 if blnre=false then end if response.write rndarray(1,10,5)&”<br>”‘調用過程 |
PS。其中的iloop、eloop是為瞭計算循環次數而已。
以上,大多數人的都是用這種方法編寫的,生成一個隨機數,然後再和以前生成的做比較,判斷是否可用;
但這不是一種AI的,或者說有效率的方法,為什麼不用兩個數組呢?
數組1,存放需要的字符串,或數字等,數組2存放生成的隨機數;當每次隨機生成中間變量temp的一個下標x,賦給數組2,然後從數組1中,去掉下標為x的數字,賦給中間變量temp;這樣每生成一個隨機數,就從數組1中拿掉這個數,下次再生成一個數就不會重復瞭,這種產生隨機數的方法原理實際是從數組1中提取。
方法二
function rndstr(istart,iend,isum) dim vntarray2(),temp,x,y response.write rndstr(1,5,2) |
這樣,是不是更簡單呢
展開一下,假如要生成隨機字符串,包含字母數字時,僅需為數組1賦值時,用函數chr(num);
假設,需要做一個手機中獎的頁面程序。
首先把值賦給數組1,可以130….~139….循環賦值,當然實際使用時從數據庫中把已有的賦值,然後再隨機提取賦給數組2;
最後,再修飾一下
temp=replace(join(array2),chr(32),””) phone=left(temp,6)&”***”&right(temp,2) |
得到類似137648***58的結果,呵呵
寫那麼多,累死瞭~~
推薦閱讀:
- C語言數據結構經典10大排序算法刨析
- 源碼解析python中randint函數的效率缺陷
- 原生JS實現特效留言框
- Python字符串常用方法以及其應用場景詳解
- 轉換文本為超連接和Email格式的代碼284278過程講解