Foreach循环仅返回最后一个结果

时间:2019-04-07 18:44:13

标签: php

我有从DB返回的结果,我想循环通过槽并使用它们对它们进行某种排序,以便按类型对它们进行排序,然后回显它们,但它仅返回最后一个DB条目。

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

我想查看所有返回的结果。例如,如果我仅从切换用例中回显名称,它会返回我需要的内容,但似乎下部循环无法正常工作。

2 个答案:

答案 0 :(得分:0)

在评论中得到人们的回答。我只需要简单地移动:

$products[] = $product;在我的循环中。

谢谢大家。

答案 1 :(得分:0)

您在交换机盒上覆盖了$ 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;
        }
}