生成非重复随机数-PHP
我试图在生成非重复随机数-PHP,php,random,Php,Random,我试图在php中获得一个自定义函数,以返回1和20之间的一个随机数,该随机数不会重复,即多次生成相同的数字,因为我随后需要使用该数字导航到二十个网页中的一个,我不希望显示相同的网页 以下是我的代码,分为三个步骤: <form action="rand.php"> <p>Click this button to display a random number that does not repeat...</p> <p>
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>
下面是functions.php
:
require_once('functions.php');
$page = generateNumber();
echo $page;
<?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;
}
}
?>
我的代码似乎在运行,但是,它在重复数字,所以我显然做错了什么。我最初检查计数的原因是,它返回第一个数字,因为它是一个新的数字
为了查看数字的变化,我一直在刷新浏览器中的rand.php
页面。我会保持简单
// List numbers 1 to 20
$pages = range(1,20);
// Shuffle numbers
shuffle($pages);
// Get a page
$page = array_shift($pages);
我会保持简单
// 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;
}
?>
为了在每次访问页面时不重复地浏览所有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;
}
?>
$check[]
未使用当前页码填充填充填充填充范围(0,20),循环遍历可能重复的,您可能需要在会话中存储阵列。另外,当您使用了全部20个数字时会发生什么情况?我希望通过在特定会话变量上使用count
函数来捕获它,该变量监视人们对每个网页回答了多少问题,因为这是针对已经启动并运行的在线调查。每次有人提交时,我都使用标题
功能重定向到下一个网页。而不是page01转到page02和page03等。我希望它随机选择一个数字,我可以在header
函数中与url字符串连接。例如:“www.website.com/page0”$嗯。co.uk“$check[]
未使用当前页码填充填充填充填充范围(0,20),循环遍历可能重复的,您可能需要在会话中存储数组。另外,当您使用了全部20个数字时会发生什么情况?我希望通过在特定会话变量上使用count
函数来捕获它,该变量监视人们对每个网页回答了多少问题,因为这是针对已经启动并运行的在线调查。每次有人提交时,我都使用标题
功能重定向到下一个网页。而不是page01转到page02和page03等。我希望它随机选择一个数字,我可以在header
函数中与url字符串连接。例如:“www.website.com/page0”$嗯。co.uk'Dave每次运行scritThanks时,您的解决方案不会返回1到20之间的唯一数字。我喜欢Dave代码的简单性,但如果它没有返回唯一的数字,我需要研究和试验您的代码,因为您使用的是我以前从未使用过的函数,以及您使用do while
的技巧。为什么在整个代码中频繁使用*
?Dave每次运行scritThanks时,您的解决方案都不会返回1到20之间的唯一数字。我喜欢Dave代码的简单性,但如果它没有返回唯一的数字,我需要研究和试验您的代码,因为您使用的是我以前从未使用过的函数,以及您使用do while
的技巧。为什么在整个代码中频繁使用*
?如果此代码被包装在一个函数中,比如调用getPageNumber()
,那么每次调用时是否会以不同的方式洗牌这些数字?另外,如何确保脚本重新运行时,即当多个表单标记引用相同的.php
文件时,您的页面
变量不会重新初始化,从而给我一个我已经拥有的编号?如果此代码包装在一个名为getPageNumber()
的函数中,每次呼叫时,shuffle
是否会以不同的方式洗牌?此外,如何确保脚本重新运行时,即当多个表单标记引用相同的.php
文件时,不会重新初始化页面
变量,从而给我一个我已经拥有的数字?