PHP:随机数,没有重复,没有前面和后面的数字

时间:2013-08-29 09:48:21

标签: php random numbers

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

1 个答案:

答案 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));