【问题标题】:php unset session cart arrayphp取消设置会话购物车数组
【发布时间】:2014-04-03 08:29:46
【问题描述】:
    Array ( 
   [0] => Array ( 
      [0] => Array ( 
         [subject] => Computer [price] => 33.00
         [quantity] => 1 
         [total] => 33
         [level] => Array (
            [CSA] => 1
            [CSB] => 2
         )
      )
   )
   [1] => Array (
      [0] => Array (
         [subject] => English
         [price] => 33.00
         [quantity] => 25
         [total] => 825
         [level] => Array (
            [Eintro] => 1
            [EA] =>
            [EB] => 1
         )
      )
   )

如上所述,我有一个会话购物车数组。如何删除与“计算机”相关的项目,即如果主题计算机以及与主题计算机相关的价格、数量、总数和级别。

我知道我必须使用未设置的 SESSION。但是如何只为 Computer 行取消设置 session 数组,使其不影响购物车中的其他 items 数组?

var_export($session_cart);

array ( 
   0 => array ( 
      0 => array ( 
         'subject' => 'Computer', 
         'price' => '33.00',
         'quantity' => 1,
         'total' => 33, 
         'level' => array ( 
            'CSA' => '1', 
            'CSB' => '2',
         ),
      ),
   ), 
   1 => array ( 
      0 => array ( 
         'subject' => 'English',
         'price' => '33.00',
         'quantity' => 25,
         'total' => 825,
         'level' => array (
            'EA' => '1',
            'EB' => '1',
         ), 
      ), 
   ),

【问题讨论】:

    标签: php arrays session


    【解决方案1】:

    您应该循环浏览您的购物车会话:

    for ($i = 0; $i < count($_SESSION['cart']); $i++)
    {
       if($_SESSION['cart'][$i]['subject'] == 'computer')
       {
          unset($_SESSION['cart'][$i]);
       }
    }
    

    请注意,我假设您已将购物车中的所有商品和值放在一个 $_SESSION['cart'] 中。如果不是,则删除购物车并使用$_SESSION[$i](虽然这看起来很奇怪)。

    【讨论】:

    • 它有效。我之前(当新手)遇到同样的问题并解决了它。当您分配 $_SESSION 一个新的购物车项目时,只需输入 php 代码。这会很有帮助
    • ) 缺少 count() 函数,它现在应该可以正常工作了。
    • 另外,看看array_search(),它可以帮助你更快地做某事。 fr2.php.net/array_search
    【解决方案2】:

    当您删除带有数组和要删除的项目的项目调用 removeItem() 时,它将返回修改后的数组。

    试试这样:

      function removeItem($arr,$item) {
       for($i=0;$i < count($arr);$i++){
        foreach($arr[$i] as $b){
         if(in_array($item,$b)){
          unset($arr[$i]);
         }
        }
        }
        return $arr;
       }
       $arr =  removeItem($arr,"English");
       print_r($arr);
       $_SESSION['cart'] =  $arr;
    

    输出: 当我将英语作为$item 传递时,输出:

    Array
    (
        [0] => Array
            (
                [0] => Array
                    (
                        [subject] => Computer
                        [price] => 33.00
                        [quantity] => 1
                        [total] => 33
                        [level] => Array
                            (
                                [CSA] => 1
                                [CSB] => 2
                            )
    
                    )
    
            )
    
    )
    

    demo

    【讨论】:

    • 这只会删除该项目一次,如果我将计算机添加回购物车,它不会已经删除它
    • 不过,它只会删除购物车中的第一项。以及如何将值更新到我的 $_SESSION['cart']?
    • 不过,即使我将英语传递给函数,它也只会删除第一个项目
    • 您查看演示链接了吗?我通过了英语,它删除了英语。如果您通过英语,则无法删除计算机
    【解决方案3】:

    这是一个函数,可以在多数组中搜索,如果找到值则执行回调函数:

        function extend_array_search($needle,&$haystack,$callback = '') {
        $array_res = array();
        foreach ($haystack as $key => $value) {
            $res = null;
            if(is_array($value)) {
                $res = extend_array_search($needle,$value);
            } else {
                if($value == $needle) {
                    $res = $key;
                } 
            }
            if($res != null) $array_res[$key] = $res;
    
        }
        if(!empty($callback)) {
            $array_res = $callback($array_res,&$haystack);
        }
        if($array_res != null) {
            return $array_res;
        }
    }
    
    function unset_array_key($key_to_unset, $array_to_modify) {
        if(is_array($key_to_unset)) {
            foreach ($key_to_unset as $key => $value) {
                unset($array_to_modify[$key]);
            }
        } else {
            unset($array_to_modify[$key_to_unset]);
        }
    }
    
    
    
    extend_array_search('Computer',$session_cart) // return the keys containing computer OR
     extend_array_search('Computer', $session_cart,'unset_array_key'); // unset the value in $session_cart
    

    【讨论】:

      猜你喜欢
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多