为多次运行重置PHP中的foreach循环


Reset a foreach loop in PHP for multiple runs

我有一个表单,其中有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说的那样聪明一点。

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);