>

장바구니 클래스가 있는데 같은 제품에 대해 서로 다른 크기와 같은 여러 속성을 가진 동일한 제품 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'] : '').'" >

아약스가 아이템을 제거합니다

$('.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                               
      },

제거 할 기능

/**
 * 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

    설정하지 않고 빈 자리를 남겨두기 때문에 스스로 계산하는 대신 foreach 루프의 키를 사용해야합니다.

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

    이 시점에서 $array[1]  이 설정되어 있지 않으므로 수동 계산이 작동하지 않습니다. 그냥 이것을 사용하십시오

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

    그 외에도 해시를 계산하는 방식은 그다지 강력하지 않으며 입력 배열의 순서에 크게 의존합니다. 나도 이것을 바꿀 것입니다 ..

관련 자료

  • 이전 ORACLE SQL은 테이블 열 부분에서 날짜를 만듭니다
  • 다음 html - 모난, 딱딱한, 모서리가있는, 각도의, 뼈가 앙상한 - primeng의 confirmdialog는 ng-bootstrap의 모달 뒤에 표시됩니다