PHP怎么随机获取数组里面的值

PHP怎么随机获取数组里面的值,第1张

需要准备的材料分别是:电脑、php编辑器、浏览器。

1、首先,打开php编辑器,新建php文件,例如:indexphp,并定义一个数组。

2、在indexphp中,输入代码:echo $a[mt_rand(0, count($a) - 1)];。

3、浏览器运行indexphp页面,此时随机打印出了数组中的值。

4、浏览器按F5刷新,发现确实是随机的。

随机数在shell编程中十分重要

1、使用shell变量$RANDOM

echo $RANDOM

2、使用awk的随机函数

awk 'BEGIN{srand();print rand()}'

3、使用系统设备文件/dev/random 和 /dev/urandom

dd if=/dev/random | od -a |sed 's/[^ ]//;s/ //g' | head -3或dd if=/dev/urandom | od -a |sed 's/[^ ]//;s/ //g' | head -3补充:/dev/random 提供优质随机数

/dev/urandom提供伪随机数。速度更快、安全性较差的随机数发生器。

srand(

time(0)

);

放在循环外每次产生随机数的种子也是一样的啊,为什么产生的随机数就不一样了?

因为随机函数只需要一个种子就能产生一系列的随机数,并不是每个随机数都需要一个种子。

你把

srand(time(0))

放到循环前面就可以了。

原因:

time(0)返回的是系统的时间(从197011午夜算起),单位:秒,而那个循环运行起来耗时连0000001秒都不到!

也就是说,srand(time(0))

连着4次的种子是一样的,种子一样,生产的随机数当然是一样了。

如果你在把srand()放循环里面,在中间加个sleep函数,消耗一点时间(间隔大于1秒),那么生成的rand

就不一样了但是这样做很不好,连着两次用srand生成的种子,间隔一样,生产的随机数间隔有会有规律性。

另:因为两次运行同一程序的时间肯定是不一样的,所以把srand放在循环前面可以得不同的种子,这样才能得到你想要的。

C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。

(1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlibh, 其值为2147483647。

例如:#include<stdioh>

#include<stdlibh>

void main()

{

for(int i=0;i<10;i+)

printf("%d\n",rand());

} (2) 如果你要随机生成一个在一定范围的数,你可以在宏定义中定义一个random(int number)函数,然后在main()里面直接调用random()函数:例如:随机生成10个0~100的数:

#include<stdioh>

#include<stdlibh>

#define random(x) (rand()%x)

void main()

{

for(int x=0;x<10;x++)

printf("%d\n",random(100));

} (3)但是上面两个例子所生成的随机数都只能是一次性的,如果你第二次运行的时候输出结果仍和第一次一样。这与srand()函数有关。srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1。上面的两个例子就是因为没有设置随机数种子,每次随机数种子都自动设成相同值1 ,进而导致rand()所产生的随机数值都一样。srand()函数定义 : void srand (unsigned int seed);

通常可以利用geypid()或time(0)的返回值来当做seed

如果你用time(0)的话,要加入头文件#include<timeh>例如:

#include<stdioh>

#include<stdlibh>

#include<timeh>

#define random(x) (rand()%x)

void main()

{ srand((int)time(0));

for(int x=0;x<10;x++)

printf("%d\n",random(100));

}这样两次运行的结果就会不一样了!!

return一句的功能只是把得数的绝对值控制在0~32767之间,关键是next

=

next

1103515245

+

12345一句。next变量是静态的,变化以后的值是不消失的,下一次还可用,所以每执行一次next

=

next

1103515245

+

12345就获得一个新值,这个新值被return取整除、取余除后控制在0~32767之间就形成了0~32767的随机数。比如第一次,next=11103515245

+

12345=1103527590,经return中的对65536取整、对32768取余后就是16838;若再来一次,next已经是1103527590了,那么next

=

next

1103515245

+

12345就为next

=

1103527590

1103515245

+

12345=1217759518843121895;但这个数已经溢出了,实际上表示成了-1770082073,经return中取整取余后返回的就是-27009;可以算出来,再下一次是10113……不过,你这个函数并不能产生真正意义上的“随机”数,因为作为基数的1103515245在每次开始时是不变的,所以只能得出同样的序列,即每次执行都产生16838、-27009、10113……这样一组无限多的数。所以实际的C随机函数rand()的形参并不是void而是一个长整型变量,通常来调用实时时间函数获取实时时间值来得到,因为时间是每时每刻都在变化的,所以充当"1103515245”角色的数就每调用一次的值都不同。这样每次执行就都能得到不重复的序列。至于12345,我想随便取个数都行!仅供参考……

void main()

{

int num[600];

int a=1,b=255;//想要一组600个在1,255的随机数

srand((unsigend)time(0)); //1、移动到这里,2、去掉那组()

for(int i=0;i<600;i++)

num[i]=rand()()%(int)(b-a+1)+a;

---- 在VB中的随机函数是Rnd,但在使用的过程中发现,虽然程序启动后产生的数值是随机的,但对于每次重新启动,程序都会产生相同的随机数序列,应该怎样解决?----VB中随机函数的原形是: Rnd(number),Rnd函数返回小于1但大于或等于0的值。number (可选项)的值决定了Rnd生成随机数的方式。由于生成随机数方式的确定,导致了每次新启动随机函数,最初给定的种子都会生成相同的数列,因为每一次调用Rnd函数都用数列中的前一个数作为下一个数的种子。----为了每次运行程序调用随机函数都会有不同的随机数序列,在调用Rnd之前,先使用无参数的Randomize语句初始化随机数生成器,该生成器具有根据系统计时器得到的种子,这样再调用Rnd就会得到不同的随机数序列了。

以上就是关于PHP怎么随机获取数组里面的值全部的内容,包括:PHP怎么随机获取数组里面的值、在shell中获得随机数的几种方法、关于C语言随机函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10111716.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存