PHP如何检查购物车中是否存在产品

时间:2017-01-17 18:52:57

标签: php

在将其添加到购物车之前,我想检查该项目是否已存在。如果项目存在,我不想要两次显示循环中的一些项目。只需增加数组会话中现有项目的数量。

包含购物车中商品的会话数组:

Array
(
    [0] => Array
        (
            [id] => 1
            [qty] => 1
        )

    [1] => Array
        (
            [id] => 1
            [qty] => 1
        )
)

Cart页面上,循环项目形成购物车我有这个:

<?php
    $db = require('database.php');
    $cart_items = isset($_SESSION['cart']) ? $_SESSION['cart'] : null;
    $products = array();

    if($cart_items):

        foreach ($cart_items as $key => $value)
        {
            $products[$key] = $value;

            $id = (int) $value['id'];
            $result = $db->query("SELECT * FROM products WHERE id=$id");

            while($row = $result->fetch_object())
            {
                $products[$key]['id'] = $row->id;
                $products[$key]['name'] = $row->name;
                $products[$key]['price'] = number_format($row->price, 2);

                 // check if item exists
                 // this dont work i dont know how to check this 
                if($id == $row->id && $value['qty'] == 1)
                {
                    $products[$key]['qty']++;
                }
            }
        }
    endif;
?>

在我推销推车产品的前端部分:

<tbody>
             <?php if($products): ?>
                 <?php foreach ($products as $product): ?>

                     <tr>
                         <td><?= $product['id'];?></td>
                         <td><?= $product['name'];?></td>
                         <td><?= $product['price'];?> Eur</td>
                         <td><input type="text" name="qty" value="<?= $product['qty']; ?>" size="5"> </td>
                         <td><a href="<?= SITE_URL;?>?page=cart&action=delete&id=<?= $product['id'];?>" class="btn btn-default btn-sm"> <i class="glyphicon glyphicon-remove"></i> Remove</a> </td>
                     </tr>

                 <?php endforeach; ?>
             <?php endif;?>
</tbody>

问题是,当我点击id = 1的项目时,我会得到两个带有一些产品的新表行。我的想法是,当我在产品id = 1上单击2次时,只需在购物车中的现有产品上增加数量。

对此有什么消息?

1 个答案:

答案 0 :(得分:1)

首先,使用array_column()函数从$products数组中获取所有现有的产品ID。然后检查$products数组中是否存在特定项目,并相应地更新产品和/或数量详细信息。

所以你的while()循环应该是这样的:

while($row = $result->fetch_object()){
    $ids = array_column($products, 'id');
    if(in_array($row->id, $ids)){
        $products[$key]['qty']++;
    }else{
        $products[$key]['id'] = $row->id;
        $products[$key]['name'] = $row->name;
        $products[$key]['price'] = number_format($row->price, 2);
        $products[$key]['qty'] = 1;
    }
}

另外,请从foreach循环

中删除此语句
$products[$key] = $value;

更新

来自OP's comment

  

现在的问题是在购物车中循环产品,当我在购物车中循环产品时我有重复的产品因为我添加了一个产品2次并更新数量。如何防止在购物车中双循环一个项目!如果我按下10次产品,id = 1.我不想要列表中的10个新循环项目我只想更新数量值。防止<tr><td> ...</td></tr> ...

中的某个项目循环

以下列方式更改if块中的代码,

$unique_ids = array_unique(array_column($cart_items, 'id'));
foreach ($cart_items as $key => $value){
    if(!in_array($value['id'], $unique_ids)) continue;
    $id = (int) $value['id'];
    $result = $db->query("SELECT * FROM products WHERE id=$id");

    while($row = $result->fetch_object()){
        $ids = array_column($products, 'id');
        if(in_array($row->id, $ids)){
            $products[$key]['qty']++;
        }else{
            $products[$key]['id'] = $row->id;
            $products[$key]['name'] = $row->name;
            $products[$key]['price'] = number_format($row->price, 2);
            $products[$key]['qty'] = 1;
        }
    }
    $key = array_search($value['id'],$unique_ids);
    unset($unique_ids[$key]);
}