当前位置: 首页 > 知识库问答 >
问题:

带IF语句的嵌套Foreach循环

壤驷阳波
2023-03-14

数据库表:

胶片(id\U胶片主键,名称)

流派(id_genrePK,名称)

film_genre(id_filmFK,id_genreFK)

这将输出流派表中的所有流派:

$genremenu = $veza -> prepare("select * from genre");
$genremenu -> execute();
$resultmenu = $genremenu -> fetchALL(PDO::FETCH_OBJ);

这将输出特定电影的电影类型表中的所有选定类型:

$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>";
           }
        }

      }

现在我知道我在selected列表中得到了重复的输出,因为,例如,如果电影有两种类型,比如说喜剧和犯罪,这意味着对于每一个$line,他将重复两次检查$selectedgenre,所以我得到如下输出:

  1. 喜剧
  2. 喜剧《入选》
  3. 犯罪
  4. 犯罪"入选"
  5. 恐怖
  6. 恐怖

我是新的PHP,所以我问如何获得正确的列表输出没有重复的条目?我尝试了刹车和继续,但不工作或我没有使用它的权利?请帮助并提供(如果可能的话)更多的替代解决方案。谢谢你!

共有2个答案

景令秋
2023-03-14

使用循环使其成为唯一数组,如下所示

$out=array();
foreach ($resultmenu as $line) {
$out[$line-> id_genre]=$line;
}

在使用数组之前

或者在select语句中使用distinct(id\u流派),或者使用groupbyid\u流派

或者将selectedgenre id_类型放入数组中,而不是foreach

foreach ($selectedgenre as $sg) {
       if ($line-> id_genre === $sg-> id_genre) {

使用inray进行检查

邰伟彦
2023-03-14

你需要在电影中建立一系列你拥有的类型,然后用所有的类型交叉检查它们。

试试这个

<?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>";
    }
}

?>
 类似资料:
  • 该代码用于选择题。如果答案不正确,用户应该尝试,直到找到正确的答案。如果答案是正确的,就没有问题,但是如果答案是错误的,那么它就会被卡住,并不断地说“你的答案是错误的!”。我该怎么办?

  • 前面章节中,详细介绍了 3 种形式的条件语句,即 if、if else 和 if elif else,这 3 种条件语句之间可以相互嵌套。 例如,在最简单的 if 语句中嵌套 if else 语句,形式如下: if 表达式 1:     if 表示式 2:         代码块 1     else:         代码块 2 再比如,在 if else 语句中嵌套 if else 语句,形式

  • Swift 条件语句 在 Swift 语言中,你可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。 语法 Swift 语言中 嵌套 if 语句的语法: if boolean_expression_1 { /* 当 boolean_expression_1 表达式 true 时执行 */ if boolean_expression_2 {

  • C++ 判断 在 C++ 中,嵌套 if-else 语句是合法的,这意味着您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。 语法 C++ 中 嵌套 if 语句的语法: if( boolean_expression 1) { // 当布尔表达式 1 为真时执行 if(boolean_expression 2) { // 当布尔

  • 在VB.Net中嵌套If-Then-Else语句总是合法的,这意味着你可以在另一个If ElseIf语句中使用一个If或ElseIf语句。 语法 (Syntax) 嵌套If语句的语法如下 - If( boolean_expression 1)Then 'Executes when the boolean expression 1 is true If(boolean_expressi