【发布时间】:2014-07-21 14:23:16
【问题描述】:
所以让我简短地解释一下这个概念:
从列表中为用户分配一个随机名称。它检查是否有人已经拥有该名称,如果是这样,它将运行名称 gen 事情,直到找到尚未分配的名称。
所以到目前为止效果很好,我遇到的唯一问题是无法检查列表中的所有用户名是否都已分配。当然,我可以建立一个计数器并检查它是否运行了 1000 次,但这不是一个干净的解决方案,也不是真正的万无一失。我会告诉你我的意思:
$foundCl = false;
while($foundCl == false){ // Get Callname n stuff
$Cl = getCallname(); // <- selects a random name from a list
$lFoundCl = true;
$sql = mysql_query("SELECT * FROM Board_Callnames WHERE TID='$TID'");
while ($row = mysql_fetch_array($sql)){ // Checks if the name is already assigned
if($row['Callname'] == $Cl['callname']){
$lFoundCl = false;
}
}
if($lFoundCl == true){ // Found a name that isnt assigned yet, assign it to the user, dont worry about all the values here and the Cl[color] stuff
$foundCl = true;
$Cln = $Cl['callname'];
$Clc = $Cl['color'];
$ClEntry = mysql_query("INSERT INTO Board_Callnames (TID, UID, Callname, Color, Flair) VALUES ('$TID', '$UID', '$Cln', '$Clc', '0')");
} else {
$foundCl = false;
}
/* What I need:
if(this == endless){ break; }
*/
}
获取呼叫名称:
function getCallname()
{
$callnames = array(0 => "Alfa", 1 => "Bravo", 2 => "Charlie"); // etc....
$colors = array(0 => "default", 1 => "primary", 2 => "success", 3 => "info", 4 => "warning", 5 => "danger", 6 => "lila", 7 => "poison", 8 => "wine"); // NOT IMPORTANT FOR THIS
$ran_cl = rand(0, count($callnames)-1); // Selects random values
$ran_co = rand(0, count($colors)-1);
return array("callname" => $callnames[$ran_cl], "color" => $colors[$ran_co]); //Return these
}
【问题讨论】:
-
这是停机问题,本身无法解决。
-
请将
getCallname的正文添加到您的问题中。 -
您可以做的是添加有限的尝试次数,例如 10 或 100 次。
-
这段时间无论如何都不会结束......
-
不是随机检查名称,而是获取完整列表,完全随机化,然后循环遍历它们。
标签: php loops while-loop