Цикл Foreach возвращает только последний результат

У меня есть результаты, возвращенные из БД, которые я хочу зациклить и использовать для них переключатель, чтобы отсортировать их по типу, чтобы впоследствии вывести их, но он возвращает только последнюю запись БД.

<?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; внутрь цикла. Не забудьте определить его перед использованием!

Qirel 07.04.2019 20:44

Вам нужно двигаться $products[] = $product; внутри цикла

trincot 07.04.2019 20:45

посмотрите на свой код where вы добавляете свой элемент в массив.....

Franz Gleichmann 07.04.2019 20:45

Спасибо, ребята, не заметил этого!

Reinis Krūkliņš 07.04.2019 20:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
4
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Получил ответ от людей в комментариях. Пришлось просто двигаться:

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

Другие вопросы по теме