2017-02-23 1 views
0

else이 아닌 명령문에 해당하는 경우 if/elseif/else 문을 루프 할 수 있기를 원합니다.완료하려면 if/elseif/else를 반복하십시오.

$names은 사용자가 선택할 몇 개의 이름을 가진 배열입니다.

지금은 코드가 작동하지만 조건이 elseif 중 하나에 속하면 루프가 중지됩니다. 사용자의 관점에서 볼 때 아무 일도 일어나지 않았을 것입니다. 당신이 $names에있는 이름 중 어느 것도이 이전 같은 위치에 없을 때까지 셔플을 유지하려면 같은

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

는 것 같습니다. 올바르게 이해했다면 if/elseif/else 구조없이 할 수 있습니다.

이 같은 $names의 키 위치와 일치하는 현재의 이름의 배열 만들기 : 모든 키/값 쌍을 일치하는 경우

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

그런 다음 확인 array_intersect_assoc를 사용, 그리고 shuffle 그들 중 누구도 할 수 없을 때까지 (그 빈 배열을 반환합니다).

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

그런 다음 데이터베이스로 처리하십시오.

관련 문제