数组到数组推送Zend会话对象

时间:2010-06-05 10:03:15

标签: php zend-framework

我有一些在会话对象中将数组推送到数组的示例:

   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 个答案:

答案 0 :(得分: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版本下工作。