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


Compare, extract and remove from a string array PHP

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