我在页面上工作,它给你(基于范围输入)来自数组的随机字符串。它的工作方式是使用post方法,进入同一个网站,该表格在哪里。但我遇到了问题。它大部分都给出了之前给出的相同字符串,所以我想以某种方式从数组中保存键,并将其与新随机选择的键进行比较。问题是,我是初学者,我不知道该怎么做。如果你能帮助我,我会很高兴。
当前的一段代码:($ vystup代表输出,$ rageFactor是从范围输入的,$ rage0 - $ rage4是包含字符串的数组)
$rageFactor = $_POST["rageFactor"];
if ($rageFactor == "0"){
$vystup = $rage0[array_rand($rage0)];
} else if ($rageFactor == "1"){
$vystup = $rage1[array_rand($rage1)];
} else if ($rageFactor == "2"){
$vystup = $rage2[array_rand($rage2)];
} else if ($rageFactor == "3"){
$vystup = $rage3[array_rand($rage3)];
}
谢谢:)
// EDIT1
$rage = array("rage0", "rage1", "rage2", "rage3");
$vystup = $rage[$rageFactor][array_rand($rage[$rageFactor])];
答案 0 :(得分:0)
PHP有一些功能,有时不可读,但避免代码重复。
session_start();
$rageFactor = $_POST['rageFactor']; //rage number, for test use $rageFactor = rand(0,3);
$rage = getRage($rageFactor);
if(isset($_SESSION['rage'])) {
while($rage == $_SESSION['rage']) {
$rage = getRage($rageFactor);
}
}
$_SESSION['rage'] = $rage;
echo $rage;
function getRage($rageFactor)
{
$varName = 'rage'.$rageFactor;
$rage0 = ['A','B','C'];
$rage1 = ['D','E','F'];
$rage2 = ['G','H',];
$rage3 = ['I','J'];
$vystup = $$varName[array_rand($$varName)];
return $vystup;
}
代码使用"动态变量" $$varName
,将在运行时翻译为$rage0
或$rage1
或...
它将显示随机$rageX
数组中的随机元素,具体取决于您输入的$rageFactor
。
当然,您可以创建名为$rage
的多维数组,而不是多个变量。这将是一个更好的方式。
编辑:使用rage作为数组的解决方案:
$rage = [
['A','B','C'],
['D','E','F'],
['G','H',],
['I','J']
];
$rageIndex = rand(0, count($rage));
echo $rage[$rageIndex][array_rand($rage[$rageIndex])];
答案 1 :(得分:0)
通过上面的一条评论,你有一个包含4个字符串的数组,这是一个很简单的方法,只需在数组上使用shuffle()http://php.net/manual/en/function.shuffle.php。
答案 2 :(得分:0)
您可以在会话中存储范围,选择要使用的范围,抓取随机元素,然后从会话中删除该元素,以便不再使用它。当会话中的范围变空时,这将自动重置。
<?php
session_start();
$source = [
'rage1' => range(1, 10),
'rage2' => range(11, 20),
'rage3' => range(21, 30),
'rage4' => range(31, 40),
];
foreach ($source as $name => $rage) {
if (!isset($_SESSION[$name])|| empty($_SESSION[$name])) {
$_SESSION[$name] = $rage;
}
}
$whichOne = 'rage' . $_POST['rageFactor'];
$output = null;
if (isset($_SESSION[$whichOne]) && !empty($_SESSION[$whichOne])) {
shuffle($_SESSION[$whichOne]);
// array_pop is the key here. It removes the last element by reference.
$output = array_pop($_SESSION[$whichOne]);
}
var_dump( $output );