2016-01-09 208 views
0

我在PHP中使用foreach循環時遇到了一些問題。PHP退出內部foreach循環並繼續執行外部循環

我有一個外部的foreach循環和一個內部的foreach循環。

循環的基礎知識是,我有一些來自表單的數據和一些來自數據庫的數據。外部循環遍歷每個後期數據,然後將其與數據庫內部循環中的數據進行比較。

我遇到的問題是,在每個外部循環中,如果在內部循環中找到一個條目,外部循環如何知道它被找到,然後不重複條目。

所以,這裏是我使用的代碼,我發表過評論,所以你可以看到邏輯

 // get posted data  
    foreach($posted_vals as $post_key => $post_value) { 

     // query all data in assignments table  
     foreach($existing_ids as $db_key => $db_value) { 

      // check if user_id($db_value) matches ($post_value), 
      // if not then post to db 

      // if this loop does not find matching data and 
      // posts to the database, how does the outer loop 
      // know its been found and then not post again to database 

     } 

     // any entries not found in db, post to db ... er but hang on, 
     // how do i know if any entries were posted??? 

    } 
+0

添加一個邏輯測試,然後使用'break'如果測試結果爲真 – RamRaider

+0

我該怎麼做? – frobak

+0

如何測試值是否出現在兩個關聯數組中?如果($ posted_vals [user_id] == $ existing_ids [user_id])。我似乎無法比較內部循環?!? – frobak

回答

1

你可以設置一個標誌變量isFound具有後是否在內環發現問題即時通訊或不。最初的變量是false,但是如果在內部循環中找到該帖子,它將被更新爲true,然後在外部循環中,您可以檢查isFound是真的還是假的。因此,您可以檢查您的帖子是否在內部循環中找到。這裏是你如何能做到這一點:

// get posted data  
foreach($posted_vals as $post_key => $post_value) { 
    $isFound = false; 
    // query all data in assignments table  
    foreach($existing_ids as $db_key => $db_value) { 
     //if found in db then set $isFound = true; 
    } 
    //if(!isFound) that means if the post was not found 
    // any entries not found in db, post to db ... er but hang on, 
    // how do i know if any entries were posted??? 
} 
1

當你把DB-比較在一個單獨的函數它可能會變得更加清晰:

foreach($posted_vals as $post_key => $post_value) { 
    if(compareWithDbValues($post_value)) { 
     return true; 
    } 
} 

function compareWithDbValues($post_value) { 
    foreach($existing_ids as $db_key => $db_value) { 
     if($db_value == §post_value) { 
      return true; 
     } 
    } 

    return false; 
} 

如果你沒有在一個單獨的函數只是在內部循環中使用break而不是return true