生成非重复随机数 - PHP

use*_*598 0 php random

我试图获得一个自定义函数php来返回一个随机数,1并且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>
Run Code Online (Sandbox Code Playgroud)

这是rand.php:

require_once('functions.php');

$page = generateNumber();
echo $page;
Run Code Online (Sandbox Code Playgroud)

这是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;
    }
}

?>
Run Code Online (Sandbox Code Playgroud)

我的代码似乎正在运行,但是,它正在重复数字,所以我显然做错了什么.我最初检查的原因count是,无论如何返回第一个数字,因为它将是一个新的数字.

为了查看号码更改,我一直rand.php在浏览器中刷新页面.

小智 5

我会保持简单.

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