0

我是一个 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;
    }
}
4

2 回答 2

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++;
}
于 2013-05-17T14:06:51.993 回答
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);
于 2013-05-17T13:54:56.003 回答