У меня есть результаты, возвращенные из БД, которые я хочу зациклить и использовать для них переключатель, чтобы отсортировать их по типу, чтобы впоследствии вывести их, но он возвращает только последнюю запись БД.
<?php
require_once 'classes/Database.php';
require_once 'classes/products/Product.php';
require_once 'classes/products/Book.php';
require_once 'classes/products/DVD.php';
require_once 'classes/products/Furniture.php';
$db = new Database;
$productList = $db->query('SELECT * FROM products ORDER BY created_at DESC');
$results = $db->resultSet();
foreach ($results as $result) {
switch ($result->type) {
case 'book':
$product = new Book($result->id, $result->name, $result->price, $result->size);
break;
case 'dvd':
$product = new DVD($result->id, $result->name, $result->price, $result->size);
break;
case 'furniture':
$product = new Furniture($result->id, $result->name, $result->price, array($result->size));
break;
}
}
$products[] = $product;
?>
// А ниже вы можете увидеть часть, где я пытаюсь вывести данные, но возвращается только последний результат.
<?php foreach ($products as $product): ?>
<p class = "item">SKU: <?php echo $product->id; ?></p>
<p class = "item">Name: <?php echo $product->name; ?></p>
<p class = "item">Price: <?php echo $product->price; ?></p>
<p class = "item">Size: <?php echo $product->formatSize(); ?></p>
<?php endforeach;?>
Я бы хотел, чтобы все результаты были возвращены. Если я повторяю, например, просто имя из случаев переключения, он возвращает то, что мне нужно, но кажется, что нижний цикл не работает должным образом.
Вам нужно двигаться $products[] = $product; внутри цикла
посмотрите на свой код where вы добавляете свой элемент в массив.....
Спасибо, ребята, не заметил этого!






Получил ответ от людей в комментариях. Пришлось просто двигаться:
$products[] = $product; внутри моего цикла.
Спасибо вам всем.
Вы перезаписываете $product на своем корпусе коммутатора, попробуйте что-то вроде этого, это должно сработать:
$x = -1;
foreach ($results as $result) {
$x++;
switch ($result->type) {
case 'book':
$product[$x] = new Book($result->id, $result->name, $result->price, $result->size);
break;
case 'dvd':
$product[$x] = new DVD($result->id, $result->name, $result->price, $result->size);
break;
case 'furniture':
$product[$x] = new Furniture($result->id, $result->name, $result->price, array($result->size));
break;
}
}
Вы продолжаете перезаписывать его, а не добавлять. Переместите
$products[] = $product;внутрь цикла. Не забудьте определить его перед использованием!