php获取单一、多个随机数

[ 2017-05-09 14:42:33 | 作者: admin ]
字号: | |
一、普通随机数生成

1.int rand ( [int min, int max])
如果没有提供可选参数 min 和 max,rand() 返回 0 到 RAND_MAX 之间的伪随机数。例如想要 5 到 15(包括 5 和 15)之间的随机数,用 rand(5, 15)。在某些平台下(例如 Windows)RAND_MAX 只有 32768。如果你需要的范围大于 32768,考虑用 mt_rand() 来替代之。

2.int mt_rand ( [int min, int max])

如果没有提供可选参数 min 和 max,mt_rand() 返回 0 到 RAND_MAX 之间的伪随机数。例如想要 5 到 15(包括 5 和 15)之间的随机数,用 mt_rand(5, 15)。

3.void srand ( int seed) void mt_srand ( int seed)
在 PHP 4.2.0 中(4.2以后),无需用函数 srand() 或 mt_srand()来搜寻随机数生成器,它将被自动完成。

PS:很多老的 libc 的随机数发生器具有一些不确定和未知的特性而且很慢。
PHP 的 rand() 函数默认使用 libc 随机数发生器。
mt_rand() 函数是非正式用来替换它的。
该函数用了 Mersenne Twister 中已知的特性作为随机数发生器,它可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。

使用PHP获得一个集合中的随机元素

<?php

$my_array=array('ASP','PHP','JAVASCRIPT','AJAX','CSS','JQUERY','HTML');

echo($my_array[rand(0,6)]);

?>

 

二、n个不重复的随机数生成代码

1.array range ( int low, int high [, int step])
建立一个包含指定范围单元的数组
range() 返回数组中从 low 到 high 的单元,包括它们本身。如果 low > high,则序列将从 high 到 low。
新参数: 可选的 step 参数是 PHP 5.0.0 新加的。
如果给出了 step 的值,它将被作为单元之间的步进值。step 应该为正值。如果未指定,step 则默认为 1。

2.void shuffle ( array array)
将数组打乱
本函数打乱(随机排列单元的顺序)一个数组。
在 PHP 4.2.0 中,无需用函数 srand() 或 mt_srand()来搜寻随机数生成器,它将被自动完成。
3.string str_shuffle ( string str)
随机地打乱字符串中的所有字符
4.mixed array_rand ( array input [, int num_req])
array_rand() 在你想从数组中顺序地取出一个或多个随机的单元时相当有用。它接受 input 作为输入数组和一个可选的参数 num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。
如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。这样你就可以随机从数组中取出键名和值。

重复与否取决于输入数组。函数不会重复取出输入数组单元。
注: 在 PHP 4.2.0 中,无需用函数 srand() 或 mt_srand()来搜寻随机数生成器,它将被自动完成。

5.array array_unique ( array array)
array_unique() 接受 array 作为输入并返回没有重复值的新数组。
注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。
注: 当且仅当 (string) $elem1 === (string) $elem2 时两个单元被认为相同。就是说,当字符串的表达一样时。第一个单元将被保留。

6.void list ( mixed ...)
像 array() 一样,这不是真正的函数,而是语言结构。list() 用一步操作给一组变量进行赋值。
注: list() 仅能用于数字索引的数组并假定数字索引从 0 开始。

 

获取顺序不重复的随机数
<?php
$numbers = range(1, 100); //range 是将1到100 列成一个数组
$no = 6;
$result = array_rand($numbers, $no); //array_rand 顺序随机取出数组中的指定数目的单元
for ($i = 0; $i < $no; $i++)
{
     echo $result[$i] . "<br>";
}
print_r($result);
?>
 

获取非顺序不重复的随机数

方法1: range->shuffle->array_slice
代码如下:
<?php
$numbers = range(1, 100); //range 是将1到100 列成一个数组
shuffle($numbers); //shuffle 将数组顺序随即打乱
$no = 6;
$result = array_slice($numbers, 0, $no); //array_slice 取该数组中的某一段
for ($i = 0; $i < $no; $i++)
{
     echo $result[$i] . "<br>";
}
print_r($result);
?>
代码如下:
$numbers = range (1,42);//range 是将1到42 列成一个数组
shuffle ($numbers);//shuffle 将数组顺序随即打乱
$result = array_slice($numbers,0,3);//array_slice 取该数组中的某一段
print_r($result);
方法2:range->shuffle->list
代码如下:
<?php
$numbers = range(1, 20);
srand((float)microtime() * 1000000);
shuffle($numbers);
while (list(, $number) = each($numbers))
{
     echo "$number ";
}
?>


方法3(推荐)
推荐使用PHP,在1-20间随机产生5个不重复的值,如何做
代码如下:
<?php
function NoRand($begin = 0, $end = 20, $limit = 5)
{
     $rand_array = range($begin, $end);
     shuffle($rand_array); //调用现成的数组随机排列函数
     return array_slice($rand_array, 0, $limit); //截取前$limit个
}
print_r(NoRand());
?>

mt_rand->array_unique
或者不shuffle的话:
代码如下:
<?php
$tmp = array();
while (count($tmp) < 5)
{
     $tmp[] = mt_rand(1, 20);
     $tmp = array_unique($tmp);
}
print join(',', $tmp);
?>
[最后修改由 admin, 于 2017-05-09 14:45:14]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2405

这篇日志没有评论。

此日志不可发表评论。