2017-01-24 4 views
1

私は前のセッション値を現在のセッション値とマージしようとしていますが、残念ながら最後のセッションは両方の値をマージしようとすると破壊されます。codeigniterのset_userdata()を使用して前のセッション値を置き換えます

これは、私がマージセッションの配列に使用するコードです。

$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 
     ) 

) 

ここで問題がわかりません。どんな助けも高く評価されます。

+0

の下array_mergeはここに、この何の問題covr_wrap_milのみ$を作業が、もう一度保存するセッションれるようになります。 $ oldses = $ this-> session-> userdata( 'sesse');このような$ covr_wrap_milではなく、 $ oldses = array_merge($ oldses、$ covr_wrap_mil); $ this-> session-> set_userdata( 'sesse'、$ oldses); – JYoThI

+0

お返事ありがとうございます@JYoThIありがとうございます。私は$ this-> session-> set_userdata( 'sesse'、$ oldses)を使います。それは動作しません。 – vikash

+0

新しい変数をセッション変数に設定する前に、まず現在のセッションを配列に格納してから、新しいセッション値を前の配列にマージしなければなりません。 –

答えて

0

あなたは正しいことをしています。 array_merge() .IN array_merge()キーが新しい価値観とあなたで更新されている代わりに$ oldsesの店舗値にない

0

使用array_push() covr_wrap_mil $のあなたが持っているセッションにmergred配列を設定する1行

$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(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; 
1

あなたがマージされているARになりますレイあなたはそれが古いセッションデータを交換しましたので、マージされた配列、

変更

は、ここでは、代わりにマージされた配列$oldsesデータの$covr_wrap_milデータ とのセッションを上書きしているとのセッションデータを設定するを逃した

$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); 

最後にそれはあなたが最後に使用したセッションの$ 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; 
関連する問題