Сбросить цикл foreach в PHP для нескольких запусков

У меня есть форма с 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);