У меня есть форма с 9 раскрывающимися окнами, которые нужно заполнить одним и тем же запросом. Я использую цикл foreach для перечисления параметров, но копирование кода в выпадающее меню scond не дает никаких параметров. Я думаю, это потому, что результат уже цикличен, поэтому ничего не находит.
Как я могу сбросить результат, готовый для каждого цикла? Или, может быть, есть более эффективный способ достичь этого, чтобы кто-то мог это знать.
Это запрос:
$qry2 = "SELECT ride_id, name FROM tpf_rides WHERE park_id = $park_id ORDER BY name ASC"; $res2 = $pdo->query($qry2);
и это цикл, который я использую:
<select name="ride_id_image"> <option value="">Select Ride</option> <?php foreach ($res2 as $row2) { printf('<option value="%s">%s</option>' . PHP_EOL, $row2['ride_id'], $row2['name'] ); } ?> </select>
благодаря
Это гораздо более эффективный способ сделать это. Вместо того, чтобы запускать результирующий набор несколько раз, напишите его в строку один раз, а затем вы можете повторно использовать это так часто, как вам нужно:
<?php $options = ""; foreach ($res2 as $row2) { $options .= sprintf('<option value="%s">%s</option>' . PHP_EOL, $row2['ride_id'], $row2['name'] ); } ?>
Теперь, когда вы хотите распечатать параметры, вы можете просто откликнуться на свою строку:
<select name="ride_id_image"> <option value="">Select Ride</option> <?php echo $options ?> </select>
При первом запуске скопируйте данные из набора результатов в массив. В каждом последующем прогоне выполняйте foreach
по массиву вместо набора результатов.
Или, вы можете быть умными и делать, как говорит @andrewsi.
Ответ Эндрюси наиболее эффективен. Но чтобы ответить на то, что вы пытаетесь выполнить, вы можете просто получить массив из PDO:
$qry2 = "SELECT ride_id, name FROM tpf_rides WHERE park_id = $park_id ORDER BY name ASC"; $result = $pdo->query($qry2); $res2 = $result->fetch(PDO::FETCH_ASSOC);