php无法从数组

时间:2018-05-14 19:52:38

标签: php

我有一个购物车类,我可以存储相同的产品ID,其中包含多个属性,例如同一产品的不同尺寸。但是,当我的数组中有多个项目具有相同的产品ID并逐个删除时,我发现有时1或2个项目无法从阵列中删除。我可以删除一些项目但不是全部。

按钮删除项目

<div class="removebtn" data-id="'.$id.'" data-qty="'.$item['quantity'].'" data-price="'.((isset($item['attributes']['price'])) ? $item['attributes']['price'] : '').'"  data-size="'.((isset($item['attributes']['size'])) ? $item['attributes']['size'] : '').'" >

删除项目

的ajax
$('.removebtn').on('click', function(){
  var $btn = $(this);
  var id = $btn.attr('data-id');
  var size = $btn.attr('data-size');
  var price = $btn.attr('data-price');
  var qty = $btn.attr('data-qty');
 var action = "remove";
    $.ajax ({
      method: 'post',
      url: 'mycart.php',
      data: {

        id: id,
        size:size,
        action: action,
        price:price,
        qty:qty                               
      },

funciton to remove

/**
 * Remove item from cart.
 *
 * @param string $id
 * @param array  $attributes
 *
 * @return bool
 */
public function remove($id, $attributes = [])
{
    if (!isset($this->items[$id])) {
        return false;
    }

    if (empty($attributes)) {
        unset($this->items[$id]);

        $this->write();

        return true;
    }
    $hash = md5(json_encode(array_filter($attributes)));
    $index = 0;

    foreach ($this->items[$id] as $item) {
        if ($item['hash'] == $hash) {
            unset($this->items[$id][$index]);

            $this->write();

            return true;
        }
        ++$index;
    }

    return false;
}

mycart.php

if ($_POST["action"] == 'remove') {
    $cart->remove($_POST['id'],[
        'price' => $_POST['price'],
        'size' => (isset($_POST['size'])) ? $_POST['size'] : '',
    ]);
}

1 个答案:

答案 0 :(得分:0)

你应该使用foreach循环中的键,而不是自己计算,因为unset会留下空白点。

$array = [1,2,3];
unset($array[1]);

此时,$array[1]未设置,因此您的手动计数不起作用。所以只需使用此

foreach ($this->items[$id] as $index => $item) {
    ...
}

除此之外,计算哈希的方式看起来不是很强大,并且强烈依赖于输入数组的顺序。我也会改变这个......