我试图在php
中获得一个自定义函数,以返回1
和20
之间的随机数,该随机数不重复,即不止一次产生相同的数字,因为我需要随后使用此数字导航到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;
}
?>