我有一个包含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>
由于
答案 0 :(得分:5)
有一种更有效的方法可以做到这一点。而不是多次遍历结果集,将其写入字符串一次,然后您可以根据需要重复使用它:
<?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>
答案 1 :(得分:3)
首次运行时,将结果集中的数据复制到数组中。在每次后续运行中,在数组上执行foreach
而不是结果集。
或者,你可能很聪明,并且喜欢@andrewsi说。
答案 2 :(得分:2)
安德鲁斯的回答是最有效率的。但要回答你想要完成的任务,你可以从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);