[php] ช่วยผมออกจาก LOOP หน่อยครับ!

เริ่มโดย GillBate, 29 พฤษภาคม 2010, 17:59:24

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

GillBate

 :P ปวดเฮดกับมันจริงๆ ทำมาเกือบครึ่งวันแล้ว มันไม่ออกซักที แต่ละครั้งก็แจ้งเออเร่อไม่ซ้ำบรรทัด Fatal error: Maximum execution time of 30 seconds exceeded ...

นี่โค้ดครับ

$i=1; $j = 1; $turn =1; $winner =="";$index = 0;
while($winner != "attacker" or $winner != "defender"){
if($winner != "attacker" or $winner != "defender"){$index = 0;$j=1;}

while($index <= 5){
while($i <= 3){
if($data[$index]['name'] == $member[$i]['name'] and $member[$i]['hp'] > 0){

include('inc/inc.team_atk.php');

}
if($data[$index]['name'] == $e[$i]['name'] and $e[$i]['hp'] > 0){

include('inc/inc.team_def.php');

}
$i++;

//check team winner
if($member[1]['hp'] <= 0 and $member[2]['hp'] <= 0 and $member[3]['hp'] <= 0){
$winner = "defender";
echo "<b style='color:green'>MONSTER TEAM WIN!</b>";
}
if($e[1]['hp'] <= 0 and $e[2]['hp'] <= 0 and $e[3]['hp'] <= 0){
$winner = "attacker";
echo "<b style='color:green'>{$getUser_result['team_id']} TEAM WIN!</b>";
}

}
$index++;
}//END while($i < 4) for index 0


}//END BATTLE

DownsTream

อ้างถึง$i=1; $j = 1; $turn =1; $winner ==""; $index = 0;

ตรงนี้ผิดแน่ๆ ครับ == เป็นการเปรียบเทียบ แสดงว่าตอนนี้ไม่ได้ กำหนดค่าให้ $winner

while($winner != "attacker" or $winner != "defender")  ตัวนี้น่าจะต้องการให้ loop ไปเรื่อยๆ ใช้ while(1) แทนก็ได้

น่าจะประมาณนี้มากว่าครับ

<?php

$i 
0;
while(
1) {
if($i == 5) {
break;
}
echo $i'<br />';
$i++;
}

?>


ไม่รู้ว่างงหรือเปล่า ลอง copy โค้ดผมไปศึกษาดูนะครับ concept ประมาณนี้แหละ

โค้ดที่คุณเขียนมันเป็น loop ไม่รู้จบนะครับ

php จะกำหนดเวลาไว้ให้รัน ได้แค่ 30 วินาที ถ้าเกิดนั้นจะแจ้ง error อย่างที่เห็นแหละครับ


mikey99

break;  กับ exit();  ต่างกันไงหรอครับ

DownsTream

#3
break; => หยุดการวน loop หรือออกจาก loop นั่นเอง
exit();  => หยุดการประมวลผลไฟล์นั้น

GillBate

 :P จะให้มันออกตอนมีทีมที่ชนะแล้วอ่ะครับ มันอยู่ในไฟล์แทรก
เฮ้อ สุดท้ายก็ต้องถึกโดยการเอา while ออกให้เหลือ level เดียวมันถึงผ่าน แต่ก็มีไอนี่โผล่มา
Fatal error: Cannot break/continue 1 level

vii

อ้างถึงจาก: GillBate ใน 29 พฤษภาคม 2010, 21:07:17
:P จะให้มันออกตอนมีทีมที่ชนะแล้วอ่ะครับ มันอยู่ในไฟล์แทรก
เฮ้อ สุดท้ายก็ต้องถึกโดยการเอา while ออกให้เหลือ level เดียวมันถึงผ่าน แต่ก็มีไอนี่โผล่มา
Fatal error: Cannot break/continue 1 level
ไม่ใส่ break ใน if

GillBate

อ้างถึงจาก: vii ใน 30 พฤษภาคม 2010, 20:43:28
อ้างถึงจาก: GillBate ใน 29 พฤษภาคม 2010, 21:07:17
:P จะให้มันออกตอนมีทีมที่ชนะแล้วอ่ะครับ มันอยู่ในไฟล์แทรก
เฮ้อ สุดท้ายก็ต้องถึกโดยการเอา while ออกให้เหลือ level เดียวมันถึงผ่าน แต่ก็มีไอนี่โผล่มา
Fatal error: Cannot break/continue 1 level
ไม่ใส่ break ใน if

แก้ได้แล้วครับ คือ ใช้ break แบบนี้ไม่ได้อ่ะครับ
while(...){
   if(...){
       if(...){... break;}
   }
}

ต้องใช้แบบนี้อ่ะครับเลยได้
while(...){
   if(...){... break;}
}

คือมันห้ามอยู่ลึกเกินไป :P

kitazawa1st

อ้างถึงจาก: GillBate ใน 30 พฤษภาคม 2010, 21:04:30
อ้างถึงจาก: vii ใน 30 พฤษภาคม 2010, 20:43:28
อ้างถึงจาก: GillBate ใน 29 พฤษภาคม 2010, 21:07:17
:P จะให้มันออกตอนมีทีมที่ชนะแล้วอ่ะครับ มันอยู่ในไฟล์แทรก
เฮ้อ สุดท้ายก็ต้องถึกโดยการเอา while ออกให้เหลือ level เดียวมันถึงผ่าน แต่ก็มีไอนี่โผล่มา
Fatal error: Cannot break/continue 1 level
ไม่ใส่ break ใน if

แก้ได้แล้วครับ คือ ใช้ break แบบนี้ไม่ได้อ่ะครับ
while(...){
   if(...){
       if(...){... break;}
   }
}

ต้องใช้แบบนี้อ่ะครับเลยได้
while(...){
   if(...){... break;}
}

คือมันห้ามอยู่ลึกเกินไป :P

อยู่ลึกแค่ไหนก็ได้ครับ แต่ต้องทำเงื่อนไขให้ครอบคลุม เพื่อให้มันเจอทางออก
เล็กสั้น ขยันซอย