2012-03-13 96 views
1

我有一個腳本,打印出數據庫內的郵件。打破foreach循環php

每條消息都是由不同的用戶編寫的。

我想只有用戶與消息創建者的朋友,才能夠查看消息。

腳本我是:

foreach($updatesarray as $data) 
{ 
$qu=mysql_query("SELECT frid FROM friends WHERE usid='$uid'")or die(mysql_error()); 
$dataq=array(); 
$qurow=mysql_fetch_array($qu); 
$dataq[]=$qurow['frid']; 
foreach($dataq as $value){ 
    if($value!=$data['uid_fk']) 
    continue; 
} 

/Continues the output of the message 

第一的foreach從MySQL查詢陣列獲取數據。 然後,在那個foreach中,我執行另一個mysql查詢來識別當前登錄用戶的朋友列表。我把結果放入一個數組並創建一個新的foreach。如果發現任何迴路不是成爲一個用戶,它將繼續......但它不是繼續我希望它。我需要它跳過消息的整個輸出,而不是繼續第二個foreach。

變量$ data ['uid_fk']是存儲在數據庫中的消息創建者。

數據庫查詢:

if($viewtype=="friends"){ 
     $viewquery="M.uid_fk=U.uid"; 
     $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created,  U.username, U.firstname, U.middlename, U.surname, M.uploads FROM messages M, users U WHERE  $viewquery $morequery order by M.msg_id desc limit " .$this->perpage) or  die(mysql_error()); 

     } 
+0

我建議你已經用你的查詢來解決這個問題,只返回朋友的更新,而不是所有需要在PHP中過濾的更新。 – hakre 2012-03-13 17:20:23

+2

讓我明白這一點。你需要擺脫第二個循環?如果您需要從中斷出,請使用關鍵字「break」。我不想變得時髦,我可能會錯過閱讀,請您更好地指出問題! – Michael 2012-03-13 17:21:12

+0

對不起邁克爾,不要這樣突出,我需要「跳過」當前循環,並繼續其餘的foreach循環。 很好,我會在一分鐘內添加我的查詢代碼,因爲我不確定如何通過查詢來完成。我確實嘗試過。 – 2012-03-13 17:25:50

回答

3

你必須在查詢中加入消息和朋友表,並且在一次你有兩個。

+0

我正在嘗試做到這一點,但我無法弄清楚如何從朋友表中獲取數組,然後在消息查詢中使用它。例如,如果一個用戶有1000個朋友呢? – 2012-03-13 17:32:02

+0

謝謝,我設法解決這個問題,它已經奏效。 – 2012-03-13 17:39:51

1

設置一個標誌,當你continue,如果這個標誌設置 - >不輸出消息。

+0

我不完全確定你說什麼時你說的設置一個標誌。您能否提供更多的建議?謝謝 – 2012-03-13 17:23:58

+0

將變量設置爲稍後檢查的某個值。您使用的是哪本PHP書? – 2012-03-13 17:27:15

+0

@LightnessRacesinOrbit - 我的生活中沒有使用過PHP書籍,因爲我一直在過去的8年裏一直堅持下去 – 2012-03-13 17:29:44

1

試試這個跳過你的第一個循環:

continue 2;

2參數控制其嵌套的循環將持續下去。

+0

yikes ..我沒有意識到一個在php中的控制量。 – Michael 2012-03-13 17:22:37

+0

我剛剛嘗試過這一點,它缺少很多消息,包括用戶自己創建的消息。 – 2012-03-13 17:24:34

+0

@邁克爾:爲什麼?此功能清楚地記錄在http://php.net/manual/en/control-structures.continue.php – 2012-03-13 17:26:19