2017-05-28 104 views
0

我正在嘗試構建一個PHP/Oracle SQL網站,並且在將一個foreach迭代放入另一個網站時遇到了麻煩。Foreach內部foreach PHP

foreach($orders as $order) { 
    if($order["email"] == $email){ 
echo "<p>". 
"<strong>". 
"Order: ".$order["ordernumber"]. 
"</strong>".".". 
"</p>"; 
    } 
     foreach($lines as $line){ 
      if($order["ordernumber"] == $line["ordernumber"] && 
       $line["email"] == $email){ 
       echo "<p>". 
       "<strong>". 
       $line["name"].": ".$line["ammountordered"]." units"." 
       </strong>".". ". 
       "</p>"; 
      } 
     } 

} 

$訂單是包含的所有訂單,每個訂單查詢我首先檢查訂單的客戶其電子郵件是一樣的,他是與記錄在一個由($電子郵件變量) 。它只是打印訂單號。

$ lines是第二個查詢,它包含數據庫中的所有訂單行,並將訂單號作爲外鍵關聯。

隨着下一個foreach,我假裝一旦打印訂單號,它會顯示屬於該訂單的所有訂單行,如果該過濾器和它在JUST訂單的第一次迭代中正常工作。

Order: 330000. 

Small box 60mm: 500 units. 

Medium-sized box 40mm : 1000 units. 

Big box 1cm : 300 units. 

Order: 330002. 

這所示的情況在網站上,但爲了330002在數據庫中以便線,因此他們應該被打印出來,但應該有什麼問題我在做什麼,因爲它看起來像它的工作原理只是與$訂單迭代的第一個索引。

+0

通過格式化代碼開始。 –

+0

'$ lines'的結構是什麼? – RST

回答

0

因爲在黑暗中拍攝的效果很好,因此在這裏拍照。

如果你var_dump($lines),你可能會看到一個生成器或一些DB對象。不是數組。

在相同的生成器/數據庫對象上不能使用foreach兩次。

取而代之,考慮使用$lines = iterator_to_array($lines);或其他一些在使用結果集之前將結果集「轉換」爲數組的方法。