比较,提取和删除字符串数组PHP

时间:2013-05-17 13:49:42

标签: php random while-loop

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

2 个答案:

答案 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);