为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
人到中年有点甜 2022-10-28 14:58:24
这是我的代码片段:<?php $kategorien = $kategorieQuery$items = $itemQueryforeach($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 在任何时候都不为空。我错过了什么?
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

您提供的代码可以正常工作

<?php


$kategorien = [

    ["kategorie" => "test"],

    ["kategorie" => "sample"],

];

$items = [

    ["id" => 1, "name" => "item1", "done" => 0, "kategorie" => "test"],

    ["id" => 2, "name" => "item2", "done" => 0, "kategorie" => "test"],

    ["id" => 3, "name" => "item3", "done" => 0, "kategorie" => "sample"],

    ["id" => 4, "name" => "item4", "done" => 0, "kategorie" => "test"],

    ["id" => 5, "name" => "item5", "done" => 0, "kategorie" => "sample"],

];

?>


<?php foreach($kategorien as $kategorie): ?>


<div class="list">

    <h1><?= $kategorie['kategorie'] ?></h1>

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

    <ul>

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

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

        <li class="todo"><?= $item['name'] ?></li>

            <?php endif ?>

        <?php endforeach ?>

    </ul>

    <?php else: ?>

        <p>No todos</p>

    <?php endif; ?>

</div>

<?php endforeach; ?>

但是在评论中,我们了解到这$items不是一个数组,而是一个语句对象。所以你需要这样做:


<?php

require_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()会将结果保存到一个数组中,该数组可以循环多次。


一个数据库结果集有一个内部计数器;一旦到达结果集的末尾,就不能再循环它,这与数组不同。


查看完整回答
反对 回复 2022-10-28
  • 1 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号