Php 在codeigniter中使用set_userdata()替换以前的会话值

Php 在codeigniter中使用set_userdata()替换以前的会话值,php,arrays,codeigniter,session,Php,Arrays,Codeigniter,Session,我正在尝试将前一个会话值与当前会话值合并,但不幸的是,当我尝试合并这两个值时,最后一个会话被破坏 这是我用于合并会话数组的代码 $sess=$this->session->userdata('sesse'); $covr_wrap_mil=array(); $covr_wrp=$this->session->userdata('bar'); $mil=array('milu

我正在尝试将前一个会话值与当前会话值合并,但不幸的是,当我尝试合并这两个值时,最后一个会话被破坏

这是我用于合并会话数组的代码

$sess=$this->session->userdata('sesse');
    $covr_wrap_mil=array();
                $covr_wrp=$this->session->userdata('bar');              
                $mil=array('miluna_products'=>$milunaid,'total_price'=>$totalprice);            
                $covr_wrap_mil[]=array_merge($covr_wrp,$mil);

                    if(isset($sess)  && !empty($sess)):

                        $oldses=$this->session->userdata('sesse');                      
                                $oldses=array_merge($oldses,$covr_wrap_mil);                            
                                $this->session->set_userdata('sesse',$covr_wrap_mil);

                    else:

                        $this->session->set_userdata('sesse',$covr_wrap_mil);   

                    endif;
目前我得到了这个数组

 Array
(
    [0] => Array
        (
            [style_id] => 308
            [wrap] => Array
                (
                    [285] => 285
                )

            [cover] => Array
                (
                    [307] => 307
                )

            [miluna_products] => a:2:{s:6:"322%14";s:30:"a:1:{i:0;s:12:"100_2102.jpg";}";s:7:"323%268";s:35:"a:1:{i:0;s:17:"1449004825736.gif";}";}
            [total_price] => 282
        )

)
但是我想像这样合并新的数组和以前的数组

    Array
(
    [0] => Array
        (
            [style_id] => 308
            [wrap] => Array
                (
                    [285] => 285
                )

            [cover] => Array
                (
                    [307] => 307
                )

            [miluna_products] => a:2:{s:6:"322%14";s:30:"a:1:{i:0;s:12:"100_2102.jpg";}";s:7:"323%268";s:35:"a:1:{i:0;s:17:"1449004825736.gif";}";}
            [total_price] => 282
        )
    [1] => Array
        (
            [style_id] => 309
            [wrap] => Array
                (
                    [275] => 275
                )

            [cover] => Array
                (
                    [377] => 377
                )

            [miluna_products] => a:2:{s:6:"322%14";s:30:"a:1:{i:0;s:12:"100_2102.jpg";}";s:7:"323%268";s:35:"a:1:{i:0;s:17:"1449004825736.gif";}";}
            [total_price] => 282
        )

)

不明白问题出在哪里。非常感谢您的帮助。

您做得对。只换一行

 $oldses=$this->session->userdata('sesse');                      
 $oldses=array_merge($oldses,$covr_wrap_mil);                            
 $this->session->set_userdata('sesse',$oldses);
要将mergred数组设置为会话,您必须存储$oldses的值,而不是$covr\u wrap\u mil

使用
array\u push()
而不是
array\u merge()
。在
array\u merge()
中,键会用较新的值更新,您会丢失以前的会话值

因此,您的代码将是

$sess=$this->session->userdata('sesse');
$covr_wrap_mil=array();
            $covr_wrp=$this->session->userdata('bar');              
            $mil=array('miluna_products'=>$milunaid,'total_price'=>$totalprice);            
            $covr_wrap_mil[]=array_merge($covr_wrp,$mil);

                if(isset($sess)  && !empty($sess)):
                 $older_session=array(); //crate new array
                 $oldses=$this->session->userdata('sesse');                      
                 array_push($older_session,$oldses,$covr_wrap_mil);
               /*update session with $older_session*/                           
                 $this->session->set_userdata('sesse',$older_session);

                else:

                    $this->session->set_userdata('sesse',$covr_wrap_mil);   

                endif;

您已经合并了阵列,但是没有使用合并阵列设置会话数据

改变

$oldses=$this->session->userdata('sesse');                               
$oldses=array_merge($oldses,$covr_wrap_mil);                          
$this->session->set_userdata('sesse', $oldses);
这里您正在用
$covr\u wrap\u mil
数据覆盖会话 而不是合并的数组
$oldses
数据,因此它正在替换旧的会话数据

$oldses=$this->session->userdata('sesse');                               
$oldses=array_merge($oldses,$covr_wrap_mil);                          
$this->session->set_userdata('sesse', $oldses);
最后,它看起来如下所示

 $sess=$this->session->userdata('sesse');

 $covr_wrap_mil=array();
 $covr_wrp=$this->session->userdata('bar');              
 $mil=array('miluna_products'=>$milunaid,'total_price'=>$totalprice);            
 $covr_wrap_mil[]=array_merge($covr_wrp,$mil);

 if(!empty($sess)):   
     $oldses=$sess;                      
     $oldses=array_merge($oldses,$covr_wrap_mil);                            
     $this->session->set_userdata('sesse',$oldses);   
 else:
     $this->session->set_userdata('sesse',$covr_wrap_mil);   
 endif;

array_merge正在工作,但您的存储会话仅$covr_wrap_mil这是什么问题,因此您必须在最后一行中设置要使用的会话$oldses,而不是$covr_wrap_mil,如$oldses=$this->session->userdata('sesse')$oldses=数组合并($oldses,$covr\u wrap\u mil)$此->会话->设置用户数据('sesse',$oldses);谢谢你的回复,你是对的。我使用$this->session->set_userdata('sesse',$oldses);但它不起作用。在为会话变量设置新值之前,必须先将当前会话存储到数组中,然后再将新会话值合并到以前的数组中。