嵌套的foreach循环用IF语句
数据库表:嵌套的foreach循环用IF语句
膜(id_film PK,名)
流派(id_genre PK,名)
film_genre(id_film FK,id_genre FK)
这输出来自流派表的所有流派:
$genremenu = $veza -> prepare("select * from genre");
$genremenu -> execute();
$resultmenu = $genremenu -> fetchALL(PDO::FETCH_OBJ);
这输出所有选择的g从表film_genre为enres特定膜:
$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迭代来阅读所有的电影流派线输出到多个选择字段。但我在输出“选定”类型到该列表时遇到了麻烦。代码
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个流派假设喜剧和犯罪,这意味着每$行他将迭代两次检查$ selectedgenre,所以我得到的输出,如:
- 喜剧 “选择”
- 犯罪
- 犯罪
- 喜剧 “选择”
- 恐怖
- 恐怖
- 等
我新的PHP,所以我要问怎么走,没有重复的条目右侧列表输出?我试着刹车,继续但不工作,或者我没有使用它的权利?请帮助并提供(如果可能)更多替代解决方案。谢谢!
U需要在电影上创建一个流派阵列,然后对它们进行全面检查。
尝试在您的SQL查询本
<?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>";
}
}
?>
非常感谢你的回答!这解决了我的问题,我很困惑如何检查值只有一次,以免重复输出! @KikiTheOne问候! – Josip
使其通过使用循环独特的阵列如下
$out=array();
foreach ($resultmenu as $line) {
$out[$line-> id_genre]=$line;
}
使用前阵
或SELECT语句 使用distinct(id_genre)
或使用group by id_genre
或代替的foreach把selectedgenre id_genre in a array and
foreach ($selectedgenre as $sg) {
if ($line-> id_genre === $sg-> id_genre) {
使用inarray进行检查
我没有在数据库中重复的条目,为什么我应该使用distinct(id_genre)?或者我应该在哪里使用group ...我使用数据库结构和查询更新了我的问题,所以请现在阅读,如果可能,请提供您的解决方案。谢谢 – Josip
'DISTINCT'将排序帮助您的重复问题。至于选定的问题,var_dump($ line-> id_genre,$ sg-> id_genre);'输出是什么? –
检查这个 - 'if($ line-> id_genre === $ sg-> id_genre)' –
我更新了我的问题,所以我认为DISTINCT不会帮助,因为我没有从一个表中选择不同的值... @ JonStirling现在从问题更清楚var_dump输出什么 – Josip