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);但它不起作用。在为会话变量设置新值之前,必须先将当前会话存储到数组中,然后再将新会话值合并到以前的数组中。