2013-07-20 194 views
0

我試圖打印包含我在循環內收到的信息的表的一行。這確實奏效,但是,數組I循環約有200個項目,並掛起,直到每個項目被檢查。有沒有一種方法可以在每次迭代中打印行? 示例代碼我使用:從foreach打印值,for或while循環

 foreach ($array_check as $dns) { 
     if (checkdnsrr($dns. '.',"A")) { 
      $ret = "<tr> 
       <td><span class='badge badge-important'><i class='icon-remove icon-white'></i></span></td> 
       <td>$dns</td> 
       <td>-</td> 
       <td>-</td> 
       <td>-</td> 
       <td>option</td> 
       </tr><br/>"; 
      echo $ret; 
     } else { 
      $ret = "<tr> 
       <td><span class='badge badge-success'><i class='icon-ok icon-white'></i></span></td> 
       <td>$dns</td> 
       <td>-</td> 
       <td>-</td> 
       <td>-</td> 
       <td>option</td> 
       </tr><br/>"; 
      echo $ret; 
     } 
     flush(); 
     ob_flush(); 
     usleep(1000000); 
    } 

任何建議表示讚賞,我四處搜尋互聯網對此有很多,最讓我找點output_buffering這就需要將關閉和gzip也關閉。

我有他們兩個禁用,但仍然掛起,直到它完成之前顯示任何輸出。

在此先感謝!

回答

0

首先,對你的HTML稍作修改:在<tr>之後不需要<br>。這實際上是錯誤的,你不應該把任何不同於<tr>的東西放在桌子裏面。

關於你的問題,如果我得到它的權利,你希望逐行打印輸出,而循環執行,對不對?
你試圖做的是非常依賴於瀏覽器,更好的改變方法:通過Ajax請求的數據,在你的PHP腳本簡單地使用:

$output = array(); 
foreach ($array_check as $dns) { 
    $output[] = checkdnsrr($dns. '.', "A"); 
} 
header('Content-type: application/json'); 
echo json_encode($output); 

然後使用JavaScript添加你喜歡的時機解析客戶端上的HTML ,或者使用JQuery並添加一些花哨的動畫。

編輯:我忘記了checkdnsrr,修正了它。

+0

事實上,這就是我目前的工作,似乎是一個問題不能通常從PHP修復。 – user816624

0

由於您使用了usleep(1000000),所以需要時間來顯示;等待1秒。

而不是使用的if else,以顯示與該行或類,你可以簡單地做:

foreach ($array_check as $dns) { 
     echo "<tr> 
      <td><span class='badge badge-".((checkdnsrr($dns. '.',"A"))?'important':success)."'><i class='icon-remove icon-white'></i></span></td> 
      <td>$dns</td> 
      <td>-</td> 
      <td>-</td> 
      <td>-</td> 
      <td>option</td> 
      </tr><br/>"; 
    flush(); 
    ob_flush(); 
    usleep(1000000); 
} 
+0

對不起,你沒有明白我的意思,我正在使用usleep來測試它是否在每次迭代時都打印出來...... – user816624