十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
可以给你一个思路
创新互联主要从事成都网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务青山,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
在php有一个随机函数rand(min,max),min和max分表是设定的随机范围,当然可以不给他们值,那么php会在0-rand_max之间随机取值,在某些平台下(例如 Windows)RAND_MAX 只有 32768。
你可以先定义一个数组,然后循环取出随机的值,保存到数组里面,这么多数据,相信重复的概率是很小了。然后在取出的时候,先获取数组的长度,然后以0为min,数组长度-1为max进行随机获取数据,打印出数组中下标元素为该数的数据,这就是你想要的了。
JS中同上,不过JS随机是用Math.random(),它只会随机0-1之间的数据,所以你要获取多的,最好在后面*10000等你想要的数据,EG:Manth.random()*1000000,其它的原理同PHP
如果需要知道详细代码,请追问,谢谢。
建议自己先试试!
?php
$result=random(10);//生成10位随机数
//$result=random(10, '123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ');//生成10位字母数字混合字符串
echo "input type='text' size='20' value='{$result}'";
/**
* 产生随机字符串
*
* @param int $length 输出长度
* @param string $chars 可选的 ,默认为 0123456789
* @return string 字符串
*/
function random($length, $chars = '0123456789') {
$hash = '';
$max = strlen($chars) - 1;
for($i = 0; $i $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}
?
php可以使用uniqid函数生成唯一的ID
uniqid — 生成一个唯一ID
string uniqid([ 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开发过程中,对于大量的数据考虑用表格输出的时候可以用得到,代码如下:
html
head
title二行5列一共10个数据/title
/head
body
table border="1" width=80%
tr
?php
$num = 5; //当前每一行显示列数
$k = 1; //初始化
while($k=10)
{
if($k % $num == 0){
if($k==10){
echo 'td'.$k.'/td/tr'."\r\n";
}else{
echo 'td'.$k.'/td/trtr'."\r\n";
}
}
else {
echo 'td'.$k.'/td'."\r\n";
}
$k+=1; //自加
}
?
/table
/body
/html
下面是从数据库读取代码:
?php
$sql = "select * from table ";
$query = mysql_query($sql);
$num = mysql_num_rows($query);
for($i=0;$i $num;$i++) {
$result = mysql_fetch_array($query);
if($i%3==0){
$str.= " tr style= 'word-break:break-all ' ";
}
$str.= " td ".$result[ "title "]. " /td ";
if(($i+1)%$num==0) {
$str.= " /tr ";
}
}
?
table border=0
?
echo $str;
?
/table
说下思路:
1. 将生成的数字保存到mysql数据库,然后每次生成的号码不能与数据库的数字重复,请问怎么弄?
先读取数据库已存在的数字,将结果以数组格式,与rand(1,1000)的数组相比较计算差集,去除这部分数字(array_diff),再shuffle,得到新的随机数。
我觉得,你完全可以建立一个序号表,比如,1-1000,每次用时先用随机函数取(1-数据记录数)个数值,再用这个数值取得相应的记录,当取出之后,删除这个记录,这样保证记录总数一直会减少且数字也不会重复。
2. 有没有什么办法生成的时候先生成一位数的,一位数生成满了以后再生出两位数的,两位数满了然后再三位数的,以此类推?
先获取一位数的记录,再从中随机抽取一个,如果数据库中没有找到一位数的,就递增一位数,直到找到为止。
3. 代码的执行效率希望能越高越好!
如果想要代码执行效率,最好尽量减少与数据库的交互。