php不重复随机
❶ php基于自增数据如何生成不重复的随机数示例
1、 $base 基数组 如果是8位这个数组必须是8位
2、 $i 自增数,自增数不能超过8位数
当前简单分析的结果就是以上。大家如果是全局不重复,还是建议使用uuid之类的比较合适。
❷ php生成不重复随机数、数组的4种方法分享
下面写几种生成不重复随机数的方法,直接上代码吧
复制代码
代码如下:
<?php
define('RANDOM_MAX',
100);
define('COUNT',
10);
echo
'max
random
num:
'.RANDOM_MAX,
'
;result
count:'.COUNT,
'<br/>';
invoke_entry('rand1');
invoke_entry('rand2');
invoke_entry('rand3');
invoke_entry('rand4');
function
invoke_entry($func_name)
{
$time
=
new
time();
$time->time_start();
call_user_func($func_name);
echo
$func_name.'
time
spend:
',
$time->time_spend();
echo
'<br/>';
}
function
rand1()
{
$numbers
=
range
(1,
RANDOM_MAX);
shuffle($numbers); //随机打乱数组
$result
=
array_slice($numbers,
1,
COUNT);
return
$result;
}
function
rand2()
{
$result
=
array();
while(count($result)<
COUNT)
{
$result[]
=
mt_rand(1,
RANDOM_MAX); //mt_rand()是比rand()更好更快的随机函数
$result
=
array_unique($result);
//删除数组中重复的元素
}
return
$result;
}
function
rand3()
{
$result
=
array();
while(count($result)
<
COUNT)
{
$_tmp
=
mt_rand(1,
RANDOM_MAX);
if(!in_array($_tmp,
$result))
{ //当数组中不存在相同的元素时,才允许插入
$result[]
=
$_tmp;
}
}
return
$result;
}
function
rand4()
{
$result
=
array();
while
(count($result)
<
COUNT)
{
$result[]
=
mt_rand(1,
RANDOM_MAX);
$result
=
array_flip(array_flip($result)); //array_flip将数组的key和value交换
}
return
$result;
}
class
time
{
private
$_start;
public
function
time_start()
{
$this->_start
=
$this->microtime_float();
}
public
function
time_spend()
{
return
$this->microtime_float()
-
$this->_start;
}
private
function
microtime_float()
{
list($usec,
$sec)
=
explode("
",
microtime());
return
((float)$usec
+
(float)$sec);
}
}
?>
❸ php不重复随机调用一个文字,求解!
这个问题本身就是有点问题的.
1.假如你需要调用不同的文字.那么这个文字.每调用一次.就必须标记一下.这样下次才能排除已经标敬空纤记亮仿的了.这样的话.你这些字存在数据库里比较合理.直接放数组里.是挺难实现的.
2.如果说你要求不重复调用.那其实这就不算是随机的文字了.因为每个文字的机会都是一次.
既然都是一次机会.那其实就可以直接按顺序取了.反正你随亏数机取,他也是只能调用一次.
❹ PHP产生不重复随机数的5个方法总结
无论是Web应用,还是WAP或者移动应用,随机数都有其用武之地。在最近接触的几个小项目中,我也经常需要和随机数或者随机数组打交道,所以,对于PHP如何产生不重复随机数常用的几种方法小结一下(ps:方法1、4、5是我常用的,其余来自网络整理)
方法一:
复制代码
代码如下:
<?php
$numbers
=
range
(1,50);
//shuffle
将数组顺序随即打乱
shuffle
($numbers);
//array_slice
取该数组中的某一段
$num=6;
$result
=
array_slice($numbers,0,$num);
print_r($result);
?>
方法二:
复制代码
代码如下:
<?php
$numbers
=
range
(1,20);
//播下随机数发生器种子,可有可无,测试后对结果没有影响
srand
((float)microtime()*1000000);
shuffle
($numbers);
//跳过list第一个值(保存的是索引)
while
(list(,
$number)
=
each
($numbers))
{
echo
"$number
";
}
?>
方法三:
复制代码
代码如下:
<?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());
?>
上述可以在1-20间随机产生5个不重复的值
方法四:
复制代码
代码如下:
<?php
$tmp=array();
while(count($tmp)<5){
$tmp[]=mt_rand(1,20);
$tmp=array_unique($tmp);
}
print_r($tmp);
?>
方法五:
复制代码
代码如下:
<?php
$tmp
=
range(1,30);
print_r(array_rand($tmp,10));
?>
这个可能是比叫简单的了(ps:如果在range中指定了步长,就必须注意array_rand的第二个参数是否超出$tmp的长度)。
PHP提供非常丰富的数组函数,产生随机数大多可以从数组这个角度出发,若你还有方法提供,欢迎给出,文章将持续更新。
❺ 求PHP语言随机自动生成不重复的数字
//$count 随机码长度
function mrand($count){
$code = '';
for($i=0;$i<$count;$i++){
$code .= mt_rand(0,9);
}
return $code;
}
你还可以在这基础上扩展,变成还可以选择随机码类型
//生成不重复数字
function gettmp($count){
$temp = aray();
$code = mrand(3);
$i = 0;
while($i < $count){
if(!in_array($code,$temp)){
$temp[] = $code;
$i = $i + 1;
}
}
return $temp;
}
❻ php随机生成数据库中不存在、不重复数字
说下思路:
1. 将生成的数字保存到mysql数据库,然后每次生成的号码不能与数据库的数字重复,请问怎么弄?
先读取数据库已存在的数字,将结果以数组格式,与rand(1,1000)的数组相比较计算前宏差集,去除这部分数字(array_diff),再shuffle,得到新的随机数。
我觉得,你完全可以建立一个序号表,比如,1-陵判1000,每次用时先用随机函数取(1-数据记录数)个数值,再用这个数值取得相应的记录,当取出之后,删除这个记录,这样保证记录总数一直会减少且数字也不会重复。
2. 有没有什么办法生成的时候先生成一位数的,一位数生成满了以后再生出两位数的,两位数满了然后再三位数的,以此类推?
先获取一位数的记录,再从中随机抽取一个,如果数据库中没有找到一位数的,就递增一位数,直到找到为止。
3. 代码的执行效率希望能越高越好!
如果想要代码执行效率,最好尽量减少与数据库的交互尺悔改。
❼ php 如何实现推荐视频不重复,如何实现根据每个人行为标签随机推荐,并且不会重复出现已经推荐过的
不管有好多种方案,你必须处理几个问题点:
1、每个人的行为标签,标签是否有侧重点,如人员A,拥有3个标签,a,b,c,三个标签的比重是多少,侧重点是那个标签?
2、推荐视频的话,视频对应的特点标签要记录,这个是通过标签筛选视频
3、为某人推荐了视频后,要将推荐信息记录下来,后续筛选直接去重。
重点在第三步:比如说将 a、查询出所有推荐视频id 与 已经推荐后的视频id,使用数组的筛选函数操作;b、直接查询出已经视频id,将其作为剔除条件然后查询推荐视屏id; a方案是使用程序剔除,b方案是查询剔除,如果将标签视频id存入redis,已推荐的视频id也存入redis,直接使用redis 集合来存储,使用求差集操作,得到下次推荐视频
❽ php 随机生成不重复用户ID
php可以使用uniqid函数生成唯一的ID
uniqid — 生成一个唯一ID
stringuniqid([string$prefix=""[,bool$more_entropy=false]])
获取一个带前缀、基于当前时间微秒数的唯一ID。
参数说明:
prefix:有用的参数。例如:如果在多台主机上可能在同一微秒生成唯一ID。
prefix为空,则返回的字符串长度为13。more_entropy 为 TRUE,则返回的字符串长度为23。
more_entropy:如果设置为 TRUE,uniqid() 会在返回的字符串结尾增加额外的煽(使用combined linear congruential generator)。使得唯一ID更具唯一性。
返回值:
返回字符串形式的唯一ID。
❾ php 生成不重复随机数(组)的几种方法
您好,很高兴回答您的问题
$numbers=range(1,50);
//将数组顺序随机打乱
shuffle($numbers);
//取该数组中的某一段
$result=array_slice($numbers,0,6);
print_r($result);
$tmp=array();
while(count($tmp)<5){
$tmp[]=mt_rand(1,20);
$tmp=array_unique($tmp);
}
print_r($tmp);
❿ php如何生成多个随机不重复颜色代码
颜色取值范围16777215这样的值不准确也不科学吧。颜色由RGB组成。一共有255*255*255种可能。直接组合一下就行了。
$base=range(0,255);
$R=array_rand($base,20);shuffle($R);
$G=array_rand($base,20);shuffle($G);
$B=array_rand($base,20);shuffle($B);
for($i=0;$i<20;$i++){
$color[]='#'.dechex($R[$i]).dechex($G[$i]).dechex($B[$i]);//这里再加上补足两位就ok了
}
var_mp($color);