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