我是一个PHP新手,已经用最小的任务工作了相当长的时间。我试图创建一个while循环是活的,直到它找到一个匹配,应该匹配的字符串是从两个数组的两个随机字符串。但我的问题是,while循环卡住时,他们不匹配的感觉随机值提取后不改变。我就是想不起来,有人能帮帮我吗?这是我得到的可怜的代码。
$seed1 = array("kim","Jake","Mac","Pi");
$seed2 = array("Vi","Nik","Nis","Fid");
$teamTemp1 = $seed1[array_rand($seed1)];
$teamTemp2 = $seed2[array_rand($seed2)];
while(true){
if($teamTemp1 == "Kim" && $teamTemp2 != "Nis"){
echo $teamTemp1 ." + ".$teamTemp2;
return false;
}
if($teamTemp1 == "Jake" && $teamTemp2 != "Fid"){
echo $teamTemp1 ." + ".$teamTemp2;
return false;
}
if($teamTemp1 == "Mac" && $teamTemp2 != "Vi"){
echo $teamTemp1 ." + ".$teamTemp2;
return false;
}
if($teamTemp1 == "Pi" && $teamTemp2 != "Fid"){
echo $teamTemp1 ." + ".$teamTemp2;
return false;
}
}
我认为你正在努力做的是在每个团队的一个成员之间随机配对…但是阻止你不想发生的特定对位呢?
无论如何:while循环的基本概念是观察基值的变化,直到它达到有效状态。
问题1:基数不变。在while循环中,$teamTemp1
和$teamTemp2
永远不会改变。所以它们会不断地循环相同的值。
解决方案1:将随机器移动到while循环中,这样每次迭代都会得到一个新的随机匹配。
问题2:如果你不小心输入和禁止匹配,系统很容易卡住。
解决方案2:如果你多次尝试都没有找到有效的对局,我建议你添加一个紧急逃生释放。这不会为您找到一个有效的目标,但至少可以防止您锁定。
所以:
$seed1 = array("kim","Jake","Mac","Pi");
$seed2 = array("Vi","Nik","Nis","Fid");
$tries = 0;
while(true){
$teamTemp1 = $seed1[array_rand($seed1)]; // I change every time the loop repeats!
$teamTemp2 = $seed2[array_rand($seed2)]; // I change every time the loop repeats!
if($teamTemp1 == "Kim" && $teamTemp2 != "Nis"){
echo $teamTemp1 ." + ".$teamTemp2;
return false;
}
if($teamTemp1 == "Jake" && $teamTemp2 != "Fid"){
echo $teamTemp1 ." + ".$teamTemp2;
return false;
}
if($teamTemp1 == "Mac" && $teamTemp2 != "Vi"){
echo $teamTemp1 ." + ".$teamTemp2;
return false;
}
if($teamTemp1 == "Pi" && $teamTemp2 != "Fid"){
echo $teamTemp1 ." + ".$teamTemp2;
return false;
}
if( $tries > 1000 ){
return false; // Emergency Escape!
}
$tries++;
}
实际上,您应该这样做:
do {
$teamTemp1 = $seed1[array_rand($seed1)];
$teamTemp2 = $seed2[array_rand($seed2)];
if($teamTemp1 == "Kim" && $teamTemp2 != "Nis"){
echo $teamTemp1 ." + ".$teamTemp2;
return false;
}
if($teamTemp1 == "Jake" && $teamTemp2 != "Fid"){
echo $teamTemp1 ." + ".$teamTemp2;
return false;
}
if($teamTemp1 == "Mac" && $teamTemp2 != "Vi"){
echo $teamTemp1 ." + ".$teamTemp2;
return false;
}
if($teamTemp1 == "Pi" && $teamTemp2 != "Fid"){
echo $teamTemp1 ." + ".$teamTemp2;
return false;
}
} while(1);