Ваш код, как указано, отлично работает :
<?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()
сохраняет результаты в массиве, который можно циклически повторять столько раз, сколько вам нужно.
Набор результатов базы данных имеет внутренний счетчик; как только вы достигли конца результирующего набора, вы больше не можете l oop над ним, в отличие от массива.