行数组['数据'] [1]保存到会话
$ses['data'][1]['nama']= 'test';
$set = $this->session->set_userdata('data',$ses);
$get = $this->session->userdata('data');
for ($i=0; $i < count($get); $i++) {
print_r($get);
}
结果
阵 ( [1] =&gt;排列 ( [nama] =&gt;测试 ) )
。 。
我排行数组时出现问题[&#39;数据&#39;] [2]
$ses['data'][2]['nama']= 'test';
$set = $this->session->set_userdata('data',$ses);
$get = $this->session->userdata('data');
for ($i=0; $i < count($get); $i++) {
print_r($get);
}
结果:
数组([2] =&gt;数组([nama] =&gt;测试))
我想要结果数组是
不要设置[&#39;数据&#39;] [1]&amp; [&#39;数据&#39;] [2]同时保存sesion 但不同的时间
数组([1] =&gt;数组([nama] =&gt;测试) [2] =&gt;数组([nama] =&gt; test))
答案 0 :(得分:0)
尝试如下:
$ses['data'][1]['nama']= 'test';
$this->session->set_userdata('data',$ses);
//$get = $this->session->userdata('data');
$ses['data'][2]['nama']= 'test';
$this->session->set_userdata('data',$ses);
$get = $this->session->userdata('data');
print_r($get);
<强>输出强>
Array
(
[data] => Array
(
[1] => Array
(
[nama] => test
)
[2] => Array
(
[nama] => test
)
)
)
答案 1 :(得分:0)
看起来数组被覆盖了。 尝试将两个元素组合成一个数组,然后将其输入。
$ses=array(1=>array('nama'=>'test'),2=>array('nama'=>'test2'));
或者如果您想将旧会话与新会话合并......
// if later in the code, meaning $ses is already filled
$ses[2]['nama']='test2'; // new one
$set=$this->session->set_userdata('data',$ses);
// or if no $ses declared, you need to re-get
$ses[2]['nama']='test2'; // new one
$ses=array_merge_recursive($this->session->userdata('data'),$ses); // merge with old one(s)
$set = $this->session->set_userdata('data',$ses); // set new combined array
从我对文档和示例的初步阅读中可以看出,您可以在数组的第一级自由添加新数据,但是当您尝试修改更深层次的数据时,set
会关注第一级和最终用新的子代码覆盖以前的子阵列。
经过一番思考后,我的上述尝试效果不够,array_merge_recursive
是不必要的。
$data_array=$this->session->userdata('data'); // retrieve session's current data subarray
$data_array[2]['nama']='test2' // append new data to $data_array
$set_session=$this->session->set_userdata('data',$data_array); // set fresh array
$get=$this->session->userdata('data'); // retrieve new session data for checking
foreach($get as $g){
print_r($g); // check that session data is as expected
}