我正在尝试将之前的会话值与当前会话值合并,但遗憾的是,当我尝试合并两个值时,最后一个会话都会被破坏。
这是我用于合并会话数组的代码。
height=100%
目前我正在使用此阵列
$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
)
)
不明白问题出在哪里。任何帮助都会受到高度赞赏。
答案 0 :(得分:1)
您已合并数组但错过以使用合并数组设置会话数据
更改
在这里,您将使用
$covr_wrap_mil
数据覆盖会话 而不是合并的数组$oldses
数据,因此它正在替换旧的会话数据
$oldses=$this->session->userdata('sesse');
$oldses=array_merge($oldses,$covr_wrap_mil);
/* Here you are overwriting session with covr_wrap_mil data
instead of merged array data so it was replacing old session
data
*/
$this->session->set_userdata('sesse',$covr_wrap_mil);
致
$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;
答案 1 :(得分:0)
你做得对。只更改一行
$oldses=$this->session->userdata('sesse');
$oldses=array_merge($oldses,$covr_wrap_mil);
$this->session->set_userdata('sesse',$oldses);
将mergred数组设置为session,你必须存储$ oldses的值而不是$ covr_wrap_mil
答案 2 :(得分:0)
使用array_push()
代替array_merge()
。在array_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;