加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

深思 PHP 数组遍历的差别 array_diff 的实现

发布时间:2023-04-06 12:48:15 所属栏目:Asp教程 来源:
导读:前两天看到有人要编个考试系统,当时只是简单回了下用随机函数RND。实际一般需要从数据库中随机提取N道题目。以下代码都基于VBS;通常的编写类似这样的'产生不重复随机数function rndarray(istart,iend,sum)dim a

前两天看到有人要编个考试系统,当时只是简单回了下用随机函数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 i<sum

temp=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)&"<br>"'调用过程

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 x<isum

dim 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);

假设,需要做一个手机中奖的页面程序。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章