2017-04-02 29 views
1

我有3個隱藏的字段和3個文本字段。我需要遍歷兩個UPDATE數據庫記錄。如果我分別使用foreach循環,它會正確地發佈3個值。如果我嘗試將它們一起使用,它似乎是文本輸入值的三倍,這是一個日期。因此,而不是尋找這樣的:2 foreach循環提交數據的三倍

1 - 2017年4月5日
2 - 2017年4月6日
3 - 2017年4月7日

它看起來像這樣:

1 - 2017年4月5日
2 - 2017年4月5日
3 - 2017年4月5日
1 - 2017年4月6日
2 - 2017年4月6日
3 - 2 017-04-06
1 - 2017年4月7日
2 - 2017年4月7日
3 - 2017年4月7日

 foreach($_POST['commit_date'] as $commitdate) { 
      foreach($_POST['unit'] as $units) { 

       echo $units .= $commitdate . "<br/>"; 

      } 
     } 

回答

1

如果我分別使用foreach循環,它會正確地發佈3個值。如果我嘗試將它們一起使用,它似乎是文本輸入值的三倍,這是一個日期。

這是因爲您使用嵌套的foreach循環,這意味着對於每個外循環,內循環將執行三次。這就是爲什麼你得到9個值。

相反,使用一個簡單的循環for這樣,

$count = count($_POST['unit']); 
for($i = 0; $i < $count; ++$i){ 
    echo $_POST['unit'][$i] .= $_POST['commit_date'][$i] . "<br/>"; 
} 
+0

謝謝。我現在要試一試,並儘快給你回覆 – Jonathan

+0

謝謝!我已經在這方面掙扎了很多年了,我所要做的就是改變循環。不敢相信! – Jonathan

1

假設你正在發佈unitcommit_date與大小3

foreach($_POST['commit_date'] as $commitdate) { \\ this will iterate 3 
     foreach($_POST['unit'] as $units) { \\ this will iterate 9 times 

      echo $units .= $commitdate . "<br/>"; 

     } 
    } 

你會看到如下輸出:

**First Iteration** 
1 - 2017-04-05 
2 - 2017-04-05 
3 - 2017-04-05 

**Second Iteration** 
1 - 2017-04-06 
2 - 2017-04-06 
3 - 2017-04-06 

**Third Iteration** 
1 - 2017-04-07 
2 - 2017-04-07 
3 - 2017-04-07 
+0

爲什麼第二個迭代9次?它應該只重複3次,如第一個foreach語句 – Jonathan

+0

,因爲3x3。對於外循環的第一次迭代,內循環將對第二和第三次執行3次相同的循環。 – Ravi