function word($txt){
$words=file_get_contents($txt);
$wordsarr=explode("\r\n",$words);
$j=count($wordsarr);
$key=rand(0, $j);
return trim($wordsarr[$key]);
}$str1=word('words/1.txt');
$str2=word('words/1.txt');
$str3=word('words/1.txt');$title=$str1."_".$str2."_".$str3."\r\n";
file_put_contents("1.txt",$title,FILE_APPEND);声明:1.txt有3200行我用此种方法进行随机组合,居然在组合不到30个左右,会连着不停的重复,因为我时候插入到Mysql表里的 title字段唯一属性请问这个哪里的问题 为什么会这样啊 3200个不同的值 这样组合没这么大的重复率啊 在这还是连续重复
$words=file_get_contents($txt);
$wordsarr=explode("\r\n",$words);
$j=count($wordsarr);
$key=rand(0, $j);
return trim($wordsarr[$key]);
}$str1=word('words/1.txt');
$str2=word('words/1.txt');
$str3=word('words/1.txt');$title=$str1."_".$str2."_".$str3."\r\n";
file_put_contents("1.txt",$title,FILE_APPEND);声明:1.txt有3200行我用此种方法进行随机组合,居然在组合不到30个左右,会连着不停的重复,因为我时候插入到Mysql表里的 title字段唯一属性请问这个哪里的问题 为什么会这样啊 3200个不同的值 这样组合没这么大的重复率啊 在这还是连续重复
$a = array();
for($i=0; $i<10000; $i++) {
$t = rand(0, $n) .'_'. rand(0, $n) .'_'. rand(0, $n);
if(in_array($t, $a)) break;
$a[] = $t;
}
echo $i;输出 10000
当 $n < 103 时才会出现重复所以重复应出现在 1.txt 中
$n = 3200 是因为你说 1.txt有3200行
代码模拟了你随机生成串的过程
如果原始数组不重的话,那么
rand(0, $n) 不重 则取出的数据也不会重当 $n < 103 时,循环会提前跳出
输出的是小于 10000 的随机数字
我的测试代码用于是判断你的算法是否会出现问题的
经测试对于 3200 行数据,以3个 rand(0, 3200) 为一组组成串。在 1 万次循环中不会出现重复串
由此得出你的 1.txt 中有重复行的结论由于你生成的串是要回写到原文件中去的
因此行数并不是固定在 3200 行的,那么情况就要复杂多了
当行数小于 103 时是必然要产生重复的
你或许可以先预置大于103行内容你每次的操作实际上是要将文件全部读取到数组中的
那么你可以模仿 #5 的代码在写入前先判断一下