0

下面的代码在 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 个。

4

1 回答 1

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));
于 2013-08-29T09:53:41.583 回答