2012年11月22日木曜日

[CakePHP]セッション上の配列の一番後ろに格納する方法

以下のページの「5.7.1.1 write」にあるよう、CakePHPのsessionコンポーネントの$this->Session->write()で多次元配列を格納できるが、
連想配列でなく通常の配列の一番後ろに格納する方法がわからなかった。

メソッド :: セッション :: 主要なコンポーネント :: マニュアル :: 1.3コレクション 

そこで、以下で紹介されているように

Can I use array_push on a SESSION array in php?
 
$_SESSION['names'] = array();
array_push($_SESSION['names'],$name);
もしくは
$_SESSION['names'][] = $name; 
というようにすれば、namesの下に配列として0から格納し、
最後の添え字に+1した添え字で格納してくれることになる。
なので、シンプルな後者を使うことにした。
ちなみに、0ではない数字(例えば1)からカウントアップしていきたい場合は
以下で紹介されているよう。最初の値を1に格納してしまえばいいそう。

配列について

また、私の場合は、配列の添え字(上の例で言えば'name')
を変数で指定したいと考えていた。
そのためには下記のサイトで説明されているよう変数をダブルクオテーション
で囲む必要があるとのこと。

PHP で、変数を連想配列(ハッシュ)のキーにしたい。

こんな感じ。
$items["$item->id"] = $item->name;
ただ、私の場合は以下のように変数に角括弧を含むものを使おうとしていたら
動かなかった。
$_SESSION["$this->data['TargetSite']"][] = $result;
なので、以下のように一度別の変数に移してから格納したら正常に動いた。
$TargetSite=$this->data['TargetSite'];
$_SESSION["$TargetSite"][] = $result;

【課題】
やはり、 CakePHP標準の$this->Session->write()を使用して
同じことができるようになりたいな。
そちらのほうが、CakePHPの機能のセッション領域をDBにしたりする
のに簡単に対応できそう。
まぁ、ひとまず上記のやり方でいいや。

0 件のコメント:

コメントを投稿