我有这个PHP for循环。它会创建一个随机数。
for($i = 0; $i < mysql_num_rows($query); $i++) {
$random = rand(000, 999);
}
我希望for
永远不会重复随机的结果。 for
运行999次,我希望它永远不会重复for
的结果。
答案 0 :(得分:6)
我不会使用for
循环和跟踪数组。而是创建一个包含您的值范围的数组并将其随机化。
$random_numbers = range(0, 999);
shuffle($random_numbers);
现在,您可以在此阵列中弹出项目,并保证它们是唯一的。如果您需要将输出格式设置为000
,001
等,请使用str_pad()
答案 1 :(得分:3)
shuffle()
可能是最好的选择,但如果你出于某些原因不想这样做,这是另一种选择:
$max_value = 999;
$values = range(0, $max_value);
$counter = $max_value;
$num_rows = mysql_num_rows($query); //Best to move this out of the for loop so it doesn't recalculate every time through
for($i = 0; $i < $num_rows; $i++){
$rand_num = rand(0,$counter);
$current_number = $values[$rand_num];
array_splice($values, $rand_num, 1);
$counter--;
echo "rand number: " . $current_number . '<br>';
}
答案 2 :(得分:1)
$randomArray = array_rand(range(0, 999), $size = mysql_num_rows($query));
for ($i = 0; $i < $size; $i++) {
$random = $randomArray[$i];
// ...
}
答案 3 :(得分:1)
有几种方法可以做到这一点。您可以在MySQL查询本身中执行此操作。只需使用:
SELECT ... ORDER BY RAND()
这不是最快的解决方案,但它可以工作,您只需迭代数据即可。 如果您不想这样做,您需要像其他解决方案建议的那样对数组进行随机播放。
答案 4 :(得分:1)
试试这个
$count = mysql_num_rows($query);
$randomArray = range(0, $count);
shuffle($randomArray);
for ($i = 0, $j = $count; $i < $j; $i++) {
$random = array_shift($randomArray);
}
答案 5 :(得分:0)
function nonRepeat($min,$max,$count) {
if($max - $min < $count) {
return false;
}
$nonrepeatarray = array();
for($i = 0; $i < $count; $i++) {
$rand = rand($min,$max);
while(in_array($rand,$nonrepeatarray)) {
$rand = rand($min,$max);
}
//add it to the array
$nonrepeatarray[$i] = $rand;
}
return $nonrepeatarray;
}
答案 6 :(得分:0)
$results=new array();
for($i = 0; $i < mysql_num_rows($query); $i++){
$random = rand(000, 999);
if(!in_array($random,$results) {
array_push($results,$random);
}
}
// you can print_r($results) here if you want
答案 7 :(得分:0)
增加熵级别 - 或根据时间生成随机级别。 PHP.net有一个很好的例子:
// seed with microseconds
function make_seed() {
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());
$randval = rand();
答案 8 :(得分:0)
类似的东西:
$random_values = array();
for($i = 0; $i < mysql_num_rows($query); $i++){
$random = rand(000, 999);
while(in_array($random, $random_values)) $random = rand(000, 999);
$random_values[] = $random;
}