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

#php

#php

Вопрос:

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

 <?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;?>
  

Я хотел бы видеть возвращенные все результаты. Если я повторяю, например, просто name из switch cases, он возвращает то, что мне нужно, но, похоже, нижний цикл не работает должным образом.

Комментарии:

1. Вы продолжаете перезаписывать его, вместо того, чтобы добавлять. Переместитесь $products[] = $product; внутрь цикла. Не забудьте определить его перед использованием!

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

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

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

Ответ №1:

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

$products[] = $product; внутри моего цикла.

Спасибо вам всем.

Ответ №2:

Вы перезаписываете $ 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;
        }
}