2017-02-23 100 views
0

我希望能够循环if/elseif/else语句,如果它落入任何不是else的语句中。重复一个if/elseif/else来完成

$names是一个用户可以选择几个名称的数组。

现在,代码可以工作,但如果条件落入elseif中的任何一个,那么循环将停止。从用户的角度来看,几乎没有任何事情发生。

if($names[0] == $poster) { 
    shuffle($names); 
} elseif($names[1] == $entertainer) { 
    shuffle($names);   
} elseif($names[2] == $tunar) { 
    shuffle($names);   
} elseif($names[3] == $keeper) { 
    shuffle($names);   
} elseif($names[4] == $feeder) { 
    shuffle($names);  
} elseif($names[5] == $provider) { 
    shuffle($names); 
} else { 
    echo "This week's roles are:"; 

    while($row = mysqli_fetch_assoc($this_week_result)) { 
       $poster = $row['poster']; 
       $entertainer = $row['entertainer']; 
       $tunar = $row['tunar']; 
       $keeper = $row['keeper']; 
       $feeder = $row['feeder']; 
       $provider = $row['provider']; 
    } 

     echo $names[0] . " is the Poster <br>"; 
     echo $names[1] . " is the Entertainer <br>"; 
     echo $names[2] . " is the Tunar <br>"; 
     echo $names[3] . " is the Keeper <br>"; 
     echo $names[4] . " is the Feeder <br>"; 
     echo $names[5] . " is the Provider <br>"; 

     $sql = "INSERT INTO funroles 
     (poster,entertainer,tunar, keeper, feeder, provider, date) 
     VALUES ('$names[0]','$names[1]','$names[2]','$names[3]','$names[4]','$names[5]','$date')"; 

     $result = mysqli_query($conn, $sql); 
     mysqli_close($conn); 
} 
+0

你可以用switch语句做一个递归函数吗? – Dimi

+0

我什么都不明白,请你详细说明一下 –

+0

为什么这个标签为'mysql'? – shmosel

回答

1

它看起来像你想保持洗牌,直到没有名字的$names是在相同的位置它以前是。如果我理解正确,可以不使用if/elseif/else结构。

创建的$names这样的关键位置匹配当前名称的数组:

$current = [$poster, $entertainer, $tunar, $keeper, $feeder, $provider]; 

然后使用array_intersect_assoc来检查是否有键/值对匹配,并且shuffle直到他们都不做(这将返回一个空数组)。

while (array_intersect_assoc($current, $names)) { 
    shuffle($names); 
} 

然后用你的数据库做东西以后。