2013-07-05 5 views
0

Я ищу эксперта, чтобы объяснить, почему FOREACH не останавливается после UPDATE и не ломается?Перерыв не работает

Код нахожу позицию в матрице 3x10, когда она находит ее и обновляет таблицу, она должна сломаться и выйти, но она продолжает цикл. Очень очень странно.

checkPosUnder('x',array(100000)); 

function checkPosUnder($userToFill,$underUsers) { 
    echo "<br>enter func Check on all this users:<br>"; 
    print_r($underUsers); 
    $newGenUsers = array(); 
    foreach($underUsers as $curuser) { 
     echo "<br>NEW LOOP<br>"; 
     //$underThisUser 
     $freeq = $db->prepare("SELECT * FROM tueeunet WHERE username=?"); 
     $freeq->execute(array($curuser)); 
     $freeq->setFetchMode(PDO::FETCH_ASSOC); 
     $free = $freeq->fetch(); 

     if($free['under1']=='') { 
      $updateQuery = $db->prepare("UPDATE tueeunet SET under1=? WHERE username=? "); 
      $updateQuery->execute(array($userToFill,$curuser)); 
      echo "1<br>"; 
      break; 
     } 
     elseif($free['under2']=='') { 
      $updateQuery = $db->prepare("UPDATE tueeunet SET under2=? WHERE username=? "); 
      $updateQuery->execute(array($userToFill,$curuser)); 
      echo "2<br>"; 
      break; 
     } 
     elseif($free['under3']=='') { 
      $updateQuery = $db->prepare("UPDATE tueeunet SET under3=? WHERE username=? "); 
      $updateQuery->execute(array($userToFill,$curuser)); 
      echo "3<br>"; 
      break; 
     } 
     else { 
      array_push($newGenUsers, $free['under1'],$free['under2'],$free['under3']); 
      echo "<br>"; 
      print_r($newGenUsers); 
      echo "<br>"; 
      checkPosUnder($userToFill,$newGenUsers); 
     } 
    } 
} 
+2

@PLB где вы видите внешний контур? – Headshota

+0

Нет, брос здесь не останавливает цикл, я вижу «NEW LOOP» сразу после эха «1». Я также попробовал RERUTN; после перерыва и все еще видят эхо снова сразу после foreach :-( – Asi

ответ

0

Вы можете попробовать

break(2); 

Руководство не упоминает ИФ конкретно, но это encloser {}, может быть break просто выхода из IF а не Еогеасп.

+0

Не помогло брому – Asi

+0

Неустранимая ошибка: не удается сломать/продолжить 2 уровня в /home/dilobim/public_html/tueeunet/welcome.php в строке 42 – Asi

+0

Что вы получаете? При использовании только разрыва; – RiggsFolly

0

U можно использовать флаг для него ..

foreach($underUsers as $curuser) { 
    $updated = false; 
      if($free['under1']=='') { 
       $updateQuery = $db->prepare("UPDATE tueeunet SET under1=? WHERE username=? "); 
       $updateQuery->execute(array($userToFill,$curuser)); 
       echo "1<br>"; 
       $updated = true; 
      } 

    if($updated) 
    Break; 
}//Foreach 
0

возможно ваш код всегда входит в else части.

в качестве альтернативы вы можете использовать флаг в своем решении

checkPosUnder('x',array(100000)); 

function checkPosUnder($userToFill,$underUsers) { 
    echo "<br>enter func Check on all this users:<br>"; 
    print_r($underUsers); 
    $newGenUsers = array(); 
    foreach($underUsers as $curuser) { 
     $Break = false; 
     echo "<br>NEW LOOP<br>"; 
     //$underThisUser 
     $freeq = $db->prepare("SELECT * FROM tueeunet WHERE username=?"); 
     $freeq->execute(array($curuser)); 
     $freeq->setFetchMode(PDO::FETCH_ASSOC); 
     $free = $freeq->fetch(); 

     if($free['under1']=='') { 
      $updateQuery = $db->prepare("UPDATE tueeunet SET under1=? WHERE username=? "); 
      $updateQuery->execute(array($userToFill,$curuser)); 
      echo "1<br>"; 
      $Break = true; 
      break; 
     } 
     elseif($free['under2']=='') { 
      $updateQuery = $db->prepare("UPDATE tueeunet SET under2=? WHERE username=? "); 
      $updateQuery->execute(array($userToFill,$curuser)); 
      echo "2<br>"; 
      $Break = true; 
      break; 
     } 
     elseif($free['under3']=='') { 
      $updateQuery = $db->prepare("UPDATE tueeunet SET under3=? WHERE username=? "); 
      $updateQuery->execute(array($userToFill,$curuser)); 
      echo "3<br>"; 
      $Break = true; 
      break; 
     } 
     else { 
      array_push($newGenUsers, $free['under1'],$free['under2'],$free['under3']); 
      echo "<br>"; 
      print_r($newGenUsers); 
      echo "<br>"; 
      checkPosUnder($userToFill,$newGenUsers); 
     } 

     if($Break) { Break; } 
    } 
} 
Смежные вопросы