我有以下代码:
<select multiple="multiple">
<?php $sql = "SELECT book_id, book_name FROM book ORDER BY book_name";
try {
$conn = new PDO("...");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
foreach ($conn->query($sql) as $row) {
$myId = $row['book_id'];
$myName = $row['book_name'];
for ($i = 0; $i < count($array); $i++) {
if ($myId != $array[$i]) {
echo("<option value='$myId'>$myName</option>");
}
}
}
}
catch(PDOException $e) {
...
}
$conn = null;
?>
</select>
我的目的是拥有一个选择器<select>
,其中显示以前未与用户关联的书籍。在这种情况下,$ array保存已经链接到该用户的书籍的ID。
我知道问题是嵌套循环,因为我得到了我想要的结果,例如(对于$ row = 3和$ i = 2):
Book1
Book1
Book2
Book2
Book3
Book3
期望的结果将是:
Book1
Book2
Book3
但我无法弄清楚如何在没有嵌套循环的情况下比较Id。
答案 0 :(得分:1)
而不是你的for-loop
for ($i = 0; $i < count($array); $i++) {
if ($myId != $array[$i]) {
echo("<option value='$myId'>$myName</option>");
}
}
尝试in_array()instad:
if(!in_array($myId, $array)) {
echo("<option value='$myId'>$myName</option>");
}
即使$ array多次包含$ id,也只会写一次。
编辑:忘记!
否定。条件。
答案 1 :(得分:1)
我自己找到了一个解决方案,我无法相信我没有打破第二个循环:
foreach ($conn->query($sql) as $row) {
$myId = $row['book_id'];
$myName = $row['book_name'];
for ($i = 0; $i < count($array); $i++) {
if ($myId != $array[$i]) {
echo("<option value='$myId'>$myName</option>");
break;
}
}
}