0

我添加到我的购物车是这样的:

function addItem($id, $qty="1"){
    if (($this->isInCart($id))  == false){ 
        $this->cart[] = array( 'id' => $id, 'qty' => $qty);
    } else{
        $this->cart[$id]['qty']++;
    }
}

如果一个项目已经在我的购物车中,我只需告诉该方法将当前 $id 加一,但这似乎不适用于这些调用:

$basket->addItem('monkey','200');
$basket->addItem('dog', '10');
$basket->addItem('dog');

在第二次添加狗项时,以下函数仅报告我的篮子中只有 10 条狗:

function numberOfProduct($id){
    unset($number);
    foreach($this->cart as $n ){
        if ($n['id'] == $id){           
            $number = $number + $n['qty'];
        }
    }
    return $number;
}

我确定问题在于我在 addToBasket 方法中递增数组,但是当我在程序编码中使用完全相同的方法时,它可以正常工作。

我真的很卡。

编辑:按要求在购物车方法中

function isInCart($id){
    $inCart=false;
    $itemsInCart=count($this->cart);
    if ($itemsInCart > 0){
        foreach($this->cart as $cart){
            if ($cart['id']==$id){
                return $inCart=true;
                break;
            }
        }
    }   
    return $inCart;
}
4

2 回答 2

3

当您将其添加到数组时,您使用的是数字键而不是您的 ID 值:

$this->cart[] = array( 'id' => $id, 'qty' => $qty);

将其更改为:

$this->cart[$id] = array( 'id' => $id, 'qty' => $qty);

将此更改纳入您的isInCart()方法中,您应该会很好。

于 2013-02-25T17:41:07.403 回答
0
function addItem($id, $qty="1"){
...
    $this->cart[$id]['qty']++;
...

您将函数的第二个参数设置为字符串。当您再次调用函数时,您传入了一个字符串。

$basket->addItem('monkey','200');
$basket->addItem('dog', '10');
$basket->addItem('dog');

如果我有一些字符串$string = "123"并且我尝试用 增加它$string++,我不会增加它的数值。从数字中删除引号,它应该按预期工作

function addItem($id, $qty=1){
if (($this->isInCart($id))  == false){ 
    $this->cart[] = array( 'id' => $id, 'qty' => $qty);
} else{
    $this->cart[$id]['qty']++;
}
}

并像这样调用函数

$basket->addItem('monkey',200);
$basket->addItem('dog', 10);
$basket->addItem('dog');

如果您需要一个数字,最好只使用一个数字。如果来自用户输入,我可以理解使用字符串$qty,但如果是这种情况,您需要使用$qty = intval($qty)它来获取它的数字版本。

于 2013-02-25T18:12:15.313 回答