数据库表:
电影(id_film PK,名字)
流派(id_genre PK,名称)
电影类型(id_film FK,id_genre FK)
这会输出流派表中的所有流派:
$genremenu = $veza -> prepare("select * from genre");
$genremenu -> execute();
$resultmenu = $genremenu -> fetchALL(PDO::FETCH_OBJ);
这会输出特定电影的 film_genre 表中所有选定的流派:
$izraz = $veza -> prepare("select * from genre a inner join film_genre b on a.id_genre=b.id_genre where b.id_film=:id_film");
$izraz -> execute(array("id_film" => $film -> id_film));
$selectedgenre = $izraz -> fetchAll(PDO::FETCH_OBJ);
我在将数据从数据库输出到表单中的多个选定列表时遇到问题。这是一个电影数据库,我正在做每次迭代以读取所有电影类型行以输出到多个选择字段。但是我在将“选定”流派输出到该列表时遇到了麻烦。代码是
foreach ($resultmenu as $line) {
foreach ($selectedgenre as $sg) {
if ($line-> id_genre === $sg-> id_genre) {
echo "<option value=\"" . $line-> id_genre . "\" selected>" . $line-> name . "</option>";
} else {
echo "<option value=\"" . $line-> id_genre . "\">" . $line-> name . "</option>";
}
}
}
现在我知道我在选定列表中有重复的输出,因为例如,如果电影有 2 种类型,比如说喜剧和犯罪,这意味着他将对每一行 $line 迭代两次以检查 $selectedgenre,所以我得到如下输出:
- 喜剧
- 喜剧“入选”
- 犯罪
- 犯罪“选择”
- 恐怖
- 恐怖
- 等等
我是 php 的新手,所以我想问一下如何获得没有重复条目的正确列表输出?我试过刹车并继续但没有工作,或者我没有正确使用它?请帮助并提供(如果可能)更多替代解决方案。谢谢!
最佳答案
你需要建立一个你在电影中拥有的流派数组,然后将它们与所有流派进行交叉检查。
试试这个
<?php
$genres = array();
foreach ($selectedgenre as $sg) {
$genres[] = $sg->id_genre;
}
foreach ($resultmenu as $line) {
if (in_array($line->id_genre,$genres)) {
echo "<option value=\"" . $line->id_genre . "\" selected>" . $line->name . "</option>";
} else {
echo "<option value=\"" . $line->id_genre . "\">" . $line->name . "</option>";
}
}
?>
关于php - 带有 IF 语句的嵌套 foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39345435/