下面的代码在15中产生3个随机的无重复数字。
function num($min, $max, $count){
$count = abs((int)$count);
if($min > $max){
list($min, $max) = array($max, $min);
}
$u = abs($max - $min);
if($count > $u)$count = $u;
$numresult = range($min, $max);
shuffle($numresult);
return array_slice($numresult, 0, $count);
}
foreach(num(1, 15, 3) as $rnum){
echo $rnum, ' ';
}
有没有办法在随机选择发生时排除上一个和下一个数字?例如:如果第一个选中的数字是7,那么接下来的两个选择将排除6,7和8。目前,仅排除了7个。
答案 0 :(得分:3)
你需要更加聪明一点:
function getNumbers($min=1,$max=10,$count=1,$margin=0) {
$range = range(0,$max-$min);
$return = array();
for( $i=0; $i<$count; $i++) {
if( !$range) {
trigger_error("Not enough numbers to pick from!",E_USER_WARNING);
return $return;
}
$next = rand(0,count($range)-1);
$return[] = $range[$next]+$min;
array_splice($range,max(0,$next-$margin),$margin*2+1);
}
return $return;
}
致电:
echo implode(", ",getNumbers(1,15,3,1));