我是一个PHP noob,在最小的任务中工作了很长一段时间。 我试图创建一个活着的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;
}
}
答案 0 :(得分:1)
我认为你正在做的是随机化每个团队的一个成员之间的对决...但是防止你不希望发生特定的匹配?
无论如何:while循环的基本概念是观察变化的基值,直到它达到有效状态。
问题1:您的基础值不会改变。 $teamTemp1
和$teamTemp2
永远不会在while循环中更改。所以他们一遍又一遍地循环使用相同的值。
解决方案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++;
}
答案 1 :(得分:0)
在行动中,你应该这样做:
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);