生成一个不重复的随机数- PHP


Generating a Non-Repeating Random Number - PHP

我试图在php中获得一个自定义函数,以返回120之间的随机数,该随机数不重复,即不止一次产生相同的数字,因为我需要随后使用此数字导航到20个网页之一,我不希望显示相同的网页。

下面是我的代码,分三步:
<form action="rand.php">
        <p>Click this button to display a random number that does not repeat...</p>
        <p><input type="submit" value="Generate"></p>
    </form>

rand.php:

require_once('functions.php');
$page = generateNumber();
echo $page;

functions.php:

<?php
$check = array();
function generateNumber() {
    global $check;
    $page_no = mt_rand(1,20);
    $check[] = $page_no;
    if (count($check) != 1) {
        foreach ($check as $val) {
            if ($val == $page_no) {
                $page_no = mt_rand(1,10);
                continue;
            }
        }
        return $page_no;
    }
    else {
        return $page_no;
    }
}
?>

我的代码似乎是有效的,然而,它是重复的数字,所以我显然做错了什么。我最初检查count的原因是,不管它返回第一个数字,因为它将是一个单一的新数字。

为了看到数字的变化,我在浏览器中刷新了rand.php页面。

我会保持简单。

// List numbers 1 to 20
$pages = range(1,20);
// Shuffle numbers
shuffle($pages);
// Get a page
$page = array_shift($pages);

为了在每次页面访问时遍历所有20个数字,而不重复,您需要设置一个会话变量。

<?php
session_start();
if (!isset($_SESSION['numbers'])) {
    $_SESSION['numbers']="*"; //---create the session variable
}
function get_number() {
    $i = 0;
    do { 
        $num=rand(1,20); //---generate a random number
        if (!strstr($_SESSION['numbers'],"*".$num."*")) { //---check if the number has already been used
            $_SESSION['numbers']=$_SESSION['numbers'] . $i . "*"; //---add the number to the session variable to avoid repeating
            if (substr_count($_SESSION['numbers'],"*")>=21) { //---resets the session variable when all 20 number have been used
                $_SESSION['numbers']="*";
            }
            $i=$num; //---ends the while loop to return the value
         }  
    } while ($i==0);
    return $i;
}
?>