猿问

嵌套的 foreach 循环仅在 PDO 上工作一次

这是我的代码片段:


<?php 

$kategorien = $kategorieQuery

$items = $itemQuery

foreach($kategorien as $kategorie): ?>

    <div class="list">

        <h1><?php echo $kategorie['kategorie']; ?></h1>

        <?php if(!empty($items)): ?>

        <ul>

            <?php foreach($items as $item):

                if($kategorie['kategorie'] == $item['kategorie']): ?>

                    <li class="todo"><?php echo $item['kategorie']; ?></li>

                <?php endif; ?>   

            <?php endforeach; ?>

        </ul>

        <?php else: ?>

            <p>No todos</p>

        <?php endif; ?>

    </div>

<?php endforeach; ?>

变量看起来像这样(print_r):


$kategorie:  [kategorie] => test [0] => test

$item: Array ( [id] => 4 [0] => 4 [name] => name [1] => name [done] => 0 [2] => 0 [kategorie] => test [3] => test ) 1

我的问题是外部foreach循环有效,但内部循环只运行一次。因此,它会回显所有类别等于当前类别的项目名称,但所有后续时间都没有输出,但 $items 在任何时候都不为空。我错过了什么?


人到中年有点甜
浏览 107回答 1
1回答

慕的地6264312

您提供的代码可以正常工作:<?php$kategorien = [&nbsp; &nbsp; ["kategorie" => "test"],&nbsp; &nbsp; ["kategorie" => "sample"],];$items = [&nbsp; &nbsp; ["id" => 1, "name" => "item1", "done" => 0, "kategorie" => "test"],&nbsp; &nbsp; ["id" => 2, "name" => "item2", "done" => 0, "kategorie" => "test"],&nbsp; &nbsp; ["id" => 3, "name" => "item3", "done" => 0, "kategorie" => "sample"],&nbsp; &nbsp; ["id" => 4, "name" => "item4", "done" => 0, "kategorie" => "test"],&nbsp; &nbsp; ["id" => 5, "name" => "item5", "done" => 0, "kategorie" => "sample"],];?><?php foreach($kategorien as $kategorie): ?><div class="list">&nbsp; &nbsp; <h1><?= $kategorie['kategorie'] ?></h1>&nbsp; &nbsp; <?php if(!empty($items)): ?>&nbsp; &nbsp; <ul>&nbsp; &nbsp; &nbsp; &nbsp; <?php foreach($items as $item): ?>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <?php if($kategorie['kategorie'] == $item['kategorie']): ?>&nbsp; &nbsp; &nbsp; &nbsp; <li class="todo"><?= $item['name'] ?></li>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <?php endif ?>&nbsp; &nbsp; &nbsp; &nbsp; <?php endforeach ?>&nbsp; &nbsp; </ul>&nbsp; &nbsp; <?php else: ?>&nbsp; &nbsp; &nbsp; &nbsp; <p>No todos</p>&nbsp; &nbsp; <?php endif; ?></div><?php endforeach; ?>但是在评论中,我们了解到这$items不是一个数组,而是一个语句对象。所以你需要这样做:<?phprequire_once 'app/init.php';$itemsQuery = $db->prepare("SELECT id, name, done, kategorie FROM todo WHERE user_id = :user_id");$itemsQuery->execute(['user_id'=>$_SESSION['user_id']]);$items = $itemsQuery->fetchAll(\PDO::FETCH_ASSOC);与您的类别列表类似。运行fetchAll()会将结果保存到一个数组中,该数组可以循环多次。一个数据库结果集有一个内部计数器;一旦到达结果集的末尾,就不能再循环它,这与数组不同。
随时随地看视频慕课网APP
我要回答