为什么要在行中覆盖会话新数组codeigniter

时间:2017-03-24 03:39:03

标签: php arrays codeigniter

行数组['数据'] [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))

2 个答案:

答案 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
}