leedaning 2015-01-09 02:53 采纳率: 100%
浏览 2764
已采纳

随机生成的字符串为什么重复率这么高?求高手解惑

使用循环向数据库中插入数据:
createBigData.php
<?php
/*

  • 向数据库中插入数据,数万级别 / set_time_limit(0); require_once 'connDB.php'; $table = 'user'; //数据库表 $conn = ConnDB::singleton(); //调用单例模式进行数据库操作 //$conns = ConnDB::singleton(); //调用单例模式进行数据库操作 addData($table, $conn); /
  • 批量向数据库中插入数据 */ function addData($table, $conn) { for($i=1; $i<=100000; $i++){ $name = getName(); $sex = rand(0, 3); $age = rand(1, 120); $insert = "insert into ".$table." values( null, $i, '$name', '$sex', '$age')"; $conn->query($insert); //echo "
    insert:".$insert; }//end for() }//end func addData()

//随机获取姓名字符串
function getName() {
$name = '';
$singleWord = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$singleWords = 'abcdefghijklmnopqrstuvwxyz';
$length = strlen($singleWord);

for ($i = 0; $i < rand(3, $length); $i++) {
if ($i == 0) {
$name .= substr($singleWord, rand(1, $length)-1, 1);
}else {
$name .= substr($singleWords, rand(1, $length)-1, 1);
}//end if()
}//end for

return $name;
}//end func getName

?>
插入数据之后的查询结果:
图片说明

与第一条name重复的记录:
图片说明
本来要的十万条数据都有了,但是通过查询发现这样一个规律:name字段每隔1760条记录就会重复,而且不止name重复,sex、age也会一模一样,不知道是怎么回事,求各位大神解惑!

  • 写回答

5条回答 默认 最新

  • 91program 博客专家认证 2015-01-09 02:58
    关注

    随机数的产生与以下三个方面有关:
    (1) 随机数算法,这个调用系统的随机函数没有办法修改
    (2) 随机的种子 ,好像是有个 srand 的函数在 C 语言等环境下可用,但 php 偶没有用过、不太清楚
    (3) 随机的范围,可以考虑将随机数的范围设置的大一些,然后通过取模来限制在一定的范围之内

    后面两项,都是需要程序代码来处理,以增加随机数的随机性。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大