2010-06-05 39 views
1

我對會話對象推陣列陣列的一些例子:陣列到陣列中的Zend會議推對象

class someClass extends someOtherOne { 

...////// some other code here that starts session and creates namespace 

    public function __add2Session($a,$b) { 

    $namespc = $this -> __getnewNameSpace(); //returns a Zend Session Namesapce (object) 

     if (!isset($namespc -> {$a})) { $namespc -> {$a} = array(); } 

      array_push($namespc -> {$a}, $b); 

     } 

    } 


...///////////// 


$item=array(1=>"one",2=>"two",3=>"three",4=>"four",5=>"five",6=>"six",7=>"seven"); 

$k = new someClass(); 
$cart = new Zend_Session_Namespace('Cart'); 
$k -> __add2Session("items",$item); 

結果是,當我重新加載頁面幾次 - 的$cart -> items在會話中值變被覆蓋並且不被填充。有人可以解釋爲什麼會發生,我該如何解決這個問題?

我想有$cart -> items是一個「陣中陣」,如:

$cart -> items = array(array(1=>"one",2=>"two"), array(1=>"two",2=>"three")); 

回答

1

哪個版本的PHP您使用的?

這可能是因爲你必須首先獲取數組和操作之後重新分配它:

$tmp = $namespc->{$a}; 
array_push($tmp, $b); 
$namespc->{$a} = $tmp; 

我建議閱讀Zend_Session - Working with Arrays,並按照他們的榜樣。

更新:

當您使用PHP 5.2,你可能需要做的,因爲我提出的。在本文檔中,它說:

由於PHP魔術方法實現的歷史,修改在命名空間裏的數組是不是5.2.1之前下的PHP版本。

+0

PHP 5.2版 – user358643 2010-06-05 10:23:48

+0

@ kate-koopy:那麼這可能是問題所在。 – 2010-06-05 10:43:21

+0

@Fekix Kling我只看我的確切版本是5.2.6,至於http://framework.zend.com/issues/browse/ZF-800錯誤不應該發生。但它確實:( – user358643 2010-06-05 11:13:42