【问题标题】:Foreach, for loop PHP redundancyForeach,for 循环 PHP 冗余
【发布时间】:2016-09-22 14:38:51
【问题描述】:

我有以下代码:

<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>

我的目的是有一个选择器&lt;select&gt;,以前与用户没有关联的书籍出现在其中。在这种情况下,$array 保存了已经链接到该用户的书籍的 ID。

我知道问题出在嵌套循环上,因为我得到了我想要的结果,例如(对于 $row = 3 和 $i = 2):

Book1
Book1
Book2
Book2
Book3
Book3

期望的结果是:

Book1
Book2
Book3

但我不知道如何在不嵌套循环的情况下比较 Id。

【问题讨论】:

  • 在给定特定输入的情况下,您能清楚地告诉我们您想要的输出是什么吗?
  • 能否请您显示$array 中的实际内容,目前尚不清楚发生了什么以及您想要什么。
  • 你在哪里设置你的$array?还有:你试过in_array()吗?它可以防止你自己循环 $array
  • $array 来自另一个查询,其中插入了与用户关联的所有 book_id,例如:$array = [1,2]

标签: php mysql loops for-loop foreach


【解决方案1】:

而不是你的 for 循环

  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,也只会写入一次。

编辑:忘记了! 来否定。条件。

【讨论】:

  • 也会尝试这种方法!
【解决方案2】:

我自己找到了解决方案,我不敢相信我没有打破第二个循环:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多