2017-05-28 19 views
0

私はPHP/Oracle SQL Webサイトを作ろうとしていますが、foreach反復を別のものに入れるのに問題があります。Foreach inside 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は、データベース内のすべての注文行を含む2番目のクエリで、外部キーとしての注文番号に関連付けられています。

次のforeachでは、注文番号が印刷されると、その注文に属するすべての注文行が表示され、ifはフィルタを実行し、$ ordersの最初の繰り返しでのみ動作します。

Order: 330000. 

Small box 60mm: 500 units. 

Medium-sized box 40mm : 1000 units. 

Big box 1cm : 300 units. 

Order: 330002. 

これは、ウェブサイト上に表示されているものですが、それだけで動作するようにそれはそう以来、彼らは印刷する必要がありますが、私がやっていると間違って何かがあるはずですので、順番330002は、データベース内の順序線を有し$ orders反復の最初のインデックスを返します。

+0

コードの書式設定から始めます。 –

+0

'$ lines'の構造は何ですか? – RST

答えて

0

ここでは、暗闇の中のショットがうまくいくので、ここに足を運んでください。

var_dump($lines)の場合は、おそらくジェネレータまたはDBオブジェクトが表示されます。配列ではありません。

同じジェネレータ/ DBオブジェクトに対してforeachを2回使用することはできません。

代わりに、$lines = iterator_to_array($lines);または結果セットを使用する前に結果セットを配列に変換する他の方法を使用することを検討してください。