Я пытаюсь создать сайт 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.
Это то, что показано на веб-сайте, но у заказа 330002 есть строки заказа в базе данных, поэтому они должны быть напечатаны, но должно быть что-то не так с тем, что я делаю, так как кажется, что это работает только с первым индексом $ итерация заказов.
Движение здесь на конечности, потому что выстрелы в темноте работают хорошо.
если ты var_dump($lines)
вы, вероятно, увидите генератор или какой-либо объект БД. Не массив.
Ты не можешь foreach
дважды над одним и тем же генератором / объектом БД.
Вместо этого рассмотрите возможность использования $lines = iterator_to_array($lines);
или какой-то другой метод «преобразования» результирующего набора в массив перед его использованием.
Других решений пока нет …