【问题标题】:Remove an array in an array by based on a keyed value in Laravel根据 Laravel 中的键值删除数组中的数组
【发布时间】:2015-01-28 02:51:28
【问题描述】:

我正在尝试使用 Laravel 组装一个购物车系统。

以下是添加内容的方式:

public function addItem($itemId, $details = []) {
    if(isset(Session::get('cart'))) {
        Session::push('cart', ['item_id' => $itemId, 'details' => $details]);
    } else {
        Session::put('cart', ['item_id' => $itemId, 'details' => $details]);
    }
}

我知道如何从购物车中删除所有东西,这很简单:

if(isset(Session::get('cart'))) {
    Session::forget('cart');
}

但我不知道如何根据 item_id 从购物车中删除特定商品,目前我对这个功能只有:

public function removeItem($itemId) {
    if(isset(Session::get('cart'))) {

    } else {

    }
}

如何根据子数组中的键 item_id 取消设置和商品在购物车中?

【问题讨论】:

    标签: php arrays laravel laravel-4


    【解决方案1】:

    您可以使用 array_forget 函数删除嵌套数组,但您可以使用 array_except 删除部分,如下所示:

    $array = array_except($array, array('keys', 'to', 'remove'));
    

    所以在你的情况下使用:

    Session::array_except('cart', ['item_id', $itemId, 'remove']);
    

    更多详情请访问此链接http://laravel.com/docs/4.2/helpers

    【讨论】:

    • 最后的“删除”是什么意思?
    • 更像 Session::array_except('cart', ['key', 'value', 'key', 'value]);?
    【解决方案2】:

    据我所知,目前没有办法删除存储在会话中的数组的值,但您可以尝试解决方法 - 从会话中加载所有数组,删除数组值并将数组设置回会话。这样的事情应该可以工作:

    public function removeItem($itemId) {
        if(isset(Session::get('cart'))) {
            $cart = Session::get('cart');
            unset($cart[$item_id]);
            Session::set('cart', $cart);
        } else {
    
        }
    }
    

    【讨论】:

      【解决方案3】:

      Session 外观有一个forget() 函数,可让您从会话中删除项目。很酷的一点是,它在内部调用array_forget,它允许您使用“点”符号。所以这就是你的做法:

      $index = null;
      // find out the index of the item to delete
      foreach(Session::get('cart') as $i => $item){
          if($item['item_id'] == $itemId){
              $index = $i;
              break;
          }
      }
      // remove by index using the dot notation
      if($index != null){
          Session::forget('cart.'.$index);
      }
      

      您还可以通过使用item_id 作为实际的数组键来简化事情。这应该有效:

      public function addItem($itemId, $details = []) {
          Session::set('cart.'.$itemId, ['item_id' => $itemId, 'details' => $details]);
      }
      
      public function removeItem($itemId) {
          Session::forget('cart.'.$itemId);
      }
      

      【讨论】:

        猜你喜欢
        • 2019-11-19
        • 1970-01-01
        • 1970-01-01
        • 2012-09-25
        • 1970-01-01
        • 2016-04-28
        • 2020-10-19
        • 2015-05-13
        • 1970-01-01
        相关资源
        最近更新 更多