深思 PHP 数组遍历的差异(array_diff 的实现)
admin
2023-07-30 20:17:09
0

前两天看到有人要编个考试系统,当时只是简单回了下用随机函数RND

  实际一般需要从数据库中随机提取N道题目。


  以下代码都基于VBS;


  通常的编写类似这样的







\’产生不重复随机数
function rndarray(istart,iend,sum)
dim arrayid(),i,j,blnre,temp,iloop,eloop
redim arrayid(sum-1)
i=0
iloop=0
eloop=0
blnre=false
randomize
do while itemp=int(rnd*(iend-istart+1)+istart)
if i=0 then
arrayid(0)=temp
i=i+1
iloop=iloop+1
else


for j=0 to i-1
if arrayid(j)=temp then
blnre=true
iloop=iloop+1
exit for\’这一句很重要,防止多余的循环
else
iloop=iloop+1
end if
next


 if blnre=false then
 arrayid(i)=temp
 i=i+1
 else
 blnre=false
 end if


end if
eloop=eloop+iloop
iloop=0
loop
rndarray=join(arrayid)&\”循环次数:\”&eloop
end function


response.write rndarray(1,10,5)&\”
\”\’调用过程



  PS。其中的iloop、eloop是为了计算循环次数而已。


  以上,大多数人的都是用这种方法编写的,生成一个随机数,然后再和以前生成的做比较,判断是否可用;


  但这不是一种AI的,或者说有效率的方法,为什么不用两个数组呢?


  数组1,存放需要的字符串,或数字等,数组2存放生成的随机数;当每次随机生成中间变量temp的一个下标x,赋给数组2,然后从数组1中,去掉下标为x的数字,赋给中间变量temp;这样每生成一个随机数,就从数组1中拿掉这个数,下次再生成一个数就不会重复了,这种产生随机数的方法原理实际是从数组1中提取。


  方法二







function rndstr(istart,iend,isum)
dim i,j,vntarray()
redim vntarray(iend-istart)
j=istart
for i=0 to iend-istart
vntarray(i)=j
j=j+1
next


dim vntarray2(),temp,x,y
redim vntarray2(isum-1)
y=iend-istart+1
x=0
temp=vntarray
do while xdim a
randomize
vntarray2(x)=temp(int(rnd*y))
a=\” \”&vntarray2(x)&\” \”
temp=split(trim(replace(chr(32)&join(temp)&chr(32),a,\” \”)))
x=x+1
y=y-1
loop
rndstr=join(vntarray2)
end function


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的结果,呵呵


  写那么多,累死了~~

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...