[英]php - Selecting random from array without repeating
我正在頁面上工作,它為您(基於范圍輸入)提供了來自數組的隨機字符串。 它通過郵寄方式通過表單工作,該表單位於同一網站。 但是我遇到了問題。 通常,它提供與以前相同的字符串,因此我想以某種方式保存數組中的鍵,並將其與新隨機選擇的鍵進行比較。 問題是,我是初學者,但我不知道該怎么做。 如果您能幫助我,我會很高興。
當前代碼:($ 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)];
}
謝謝 :)
//編輯1
$rage = array("rage0", "rage1", "rage2", "rage3");
$vystup = $rage[$rageFactor][array_rand($rage[$rageFactor])];
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 = [
['A','B','C'],
['D','E','F'],
['G','H',],
['I','J']
];
$rageIndex = rand(0, count($rage));
echo $rage[$rageIndex][array_rand($rage[$rageIndex])];
根據上面的評論之一,您有一個包含4個字符串的數組,這是一種不錯的簡便方法,只需在數組上使用shuffle() http://php.net/manual/zh/function.shuffle.php 。
您可以在會話中存儲范圍,選擇要使用的范圍,獲取隨機元素,然后從會話中刪除該元素,以便不再使用它。 當會話范圍變為空時,這將重置自身。
<?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 );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.