干脆的,直接上代码
define('ROUNDS', 1e5);//参考,1000, 10000 ……
$krr = array();for($i=0;$i<ROUNDS;++$i){
$id = rand(1, 200000000);
if(isset($krr[$id])){
continue;
}
$krr[$id] = TRUE;
}
echo PHP_INT_MAX, DIRECTORY_SEPARATOR, PHP_VERSION, "\n", ROUNDS, '=>', sizeof($krr);
这段代码的结果,没想明白方便的,麻烦测一下,贴结果,,,
define('ROUNDS', 1e5);//参考,1000, 10000 ……
$krr = array();for($i=0;$i<ROUNDS;++$i){
$id = rand(1, 200000000);
if(isset($krr[$id])){
continue;
}
$krr[$id] = TRUE;
}
echo PHP_INT_MAX, DIRECTORY_SEPARATOR, PHP_VERSION, "\n", ROUNDS, '=>', sizeof($krr);
这段代码的结果,没想明白方便的,麻烦测一下,贴结果,,,
int rand ([ int $min ], int $max )
rand() 返回 0 到 RAND_MAX 之间的伪随机整数。
在某些平台下(例如 Windows)RAND_MAX 只有 32768。
详情见手册
echo rand(1, 200000000);很少有机会能输出少于2^15的数字,,可以随意测一下如果我没理解错误的话另外,可以
define('ROUNDS', 32769);//结果一样
改用mt_rand的话,结果可能更大。
可以得到大于32768 的数,估计是最多只能随机发生32768次
用mt_rand(1, 200000000)次数会多些
$krr = array();for($i=0;$i<ROUNDS;++$i){
$id = rand(1, 200000000);
if(isset($krr[$id])){
$tmp = 0;
foreach($krr AS $v){
if($v === $id){
echo "$tmp \n";
break;
}
++$tmp;
}
}
$krr[$id] = $id;
}
上面的代码输出,吊诡的地方在于,输出是依照顺序增加的,依此,再写一段测试代码
for($i=0;$i<100;$i++){
echo fun_rand(1, 10000), "\n";/////这里输出每次都一样,hohoho~~~~~~
}function fun_rand($min, $max){
$res = rand($min, $max);
for($i=0;$i<32767;$i++) rand($min, $max);
return $res;
}
今天没时间了,感谢大家,回头再查一下源码