无法在对象中增加PHP数组变量

时间:2013-02-25 17:39:51

标签: php arrays shopping-cart

我正在添加到我的购物车中:

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

如果某个商品已经在我的购物车中,我只是告诉该方法将当前的$ id增加1,但这似乎不适用于这些调用:

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

2 个答案:

答案 0 :(得分:3)

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

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

将其更改为:

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

将此更改合并到您的isInCart()方法中,您应该做得很好。

答案 1 :(得分: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)来获取数字版本。