我有一些在会话对象中将数组推送到数组的示例:
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"));
答案 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版本下工作。