我正在尝试创建一个PHP/Oracle SQL网站,但我在将foreach迭代放入另一个迭代时遇到了麻烦。
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>";
}
}
}$orders是一个包含所有订单的查询,对于每个订单,我首先检查订单是否是由一个客户发出的,该客户的电子邮件与他登录时使用的电子邮件相同($email变量)。它只打印订单号。
$lines是第二个查询,它包含数据库中的所有订单行,与作为外键的订单号相关联。
对于下一个foreach,我假设一旦打印了订单号,它就会显示属于该订单的所有订单行,if进行过滤,它只在$orders的第一次迭代中起作用。
Order: 330000.
Small box 60mm: 500 units.
Medium-sized box 40mm : 1000 units.
Big box 1cm : 300 units.
Order: 330002.这是网站上显示的内容,但是order 330002在数据库中有订单行,所以它们应该被打印出来,但我所做的应该是有问题的,因为它似乎只适用于$orders迭代的第一个索引。
发布于 2017-05-28 17:42:48
这里有点冒险,因为在黑暗中拍摄效果很好。
如果您使用var_dump($lines),您可能会看到一个生成器或一些DB对象。不是数组。
你不能在同一个生成器/DB对象上foreach两次。
相反,在使用结果集之前,可以考虑使用$lines = iterator_to_array($lines);或其他将结果集“转换”为数组的方法。
https://stackoverflow.com/questions/44225820
复制相似问题