2014-10-16 71 views
-2

有一個奇怪的問題,break不會在while循環中斷開並保持旋轉。從邏輯上講,應該打破這種循環,我設置一些輸出Php運算符`break'不會停止,而

while ($c++ != 5) 
    { 
     // here is curl request, doesn't relevant so I have removed it 

     preg_match("!<.*?>(\S*)[^<>]*?{$to}<!", $resp, $result) ; 
     // 
     echo 'cnt = ' .count($result).'<br>'; 
     if(!count($result)) 
     { 
      $amount = 0; 
      echo 'sleep called'; 
      sleep(4); 
      exit; 
      continue; 
     } 
     else 
     { 
      $amount = trim(@$result[1]); 
      $amount = round($amount + $amount * $exchange_ratio, $precision); 
      echo 'break happen<br>'; 
      break; 
     } 
    } 

所以輸出

cnt = 2 
break happen 
cnt = 0 
sleep called 

所以跳過break並保持旋轉。怎麼會這樣?

EDIT 對我的本地主機很好,所以問題可能與PHP版本?

+1

一旦某事點擊'退出;'它停在那裏,不會'繼續; ' - 刪除'退出;' – 2014-10-16 19:29:28

+1

是的,但我猜這裏的問題是:爲什麼不是休息發生後的休息發生(原文如此)跳出結構的時候 – Nanne 2014-10-16 19:32:00

+2

你能設置一個最小化和孤立的您正在遇到的問題的演示?我很確定問題在其他地方 – PeeHaa 2014-10-16 19:35:06

回答

1

您必須多次運行此代碼:是否有第二次調用此腳本,或者第二個循環圍繞此部分?看看我的測試代碼:突破後它顯然打破:

$貓tmp.php

<?php 

$c = 0; 
while ($c++ != 5) 
{ 
    if(false) //just emulating you 
    { 
     $amount = 0; 
     echo 'sleep called'; 
     sleep(4); 
     exit; 
     continue; //this will never be called by the way 
    } 
    else 
    { 
     echo 'break happen<br>'; 
     break; //this indeed breaks out of the while 
    } 
} 

$ php tmp.php
break happen<br>$

($將是下一個提示,上與我沒有放入換行符相同的行:))

+2

好奇爲什麼有人認爲這是錯誤的。 – Nanne 2014-10-16 19:39:31

+0

很可能是因爲它不是一個直接的答案,但或多或​​少只是使用您自己的變量說明默認功能的現有腳本的rechalk。這是完全正確的,但是爲什麼OP的代碼不起作用並不是一個明確而簡潔的答案。不是說它應該是downvoted,但你知道..(fyi我沒有downvote) – Ohgodwhy 2014-10-16 19:52:41

+0

我不同意:它的一個概念證明和一個例子 - 一個完整的愚蠢版本將表現如預期。所以在OP的代碼中一定有不同的東西。例如:這證明了OP的代碼不應該給出規定的結果 – Nanne 2014-10-16 19:54:58