无法使用PHP将数组传递到另一个页面

时间:2011-08-27 11:43:06

标签: php simplexml session-variables

我是编程和PHP的新手,并且在两个页面之间传递带有simplexml元素的数组时遇到了麻烦。

Array
(
[price] => SimpleXMLElement Object
    (
        [0] => 290.4
    )

[Currency] => SimpleXMLElement Object
    (
        [0] => USD
    )

我可以将信息输入到会话中,因为我可以在第一页上回显它,但当我尝试在第二页上回显它时,数组似乎是空的。

第一页

$_SESSION['selectedInfo'] = $selectedInfo;
print_r($_SESSION);

第二页

<?php
session_start();

echo "<pre>";
print_r($_SESSION);
echo "</pre>"; 

?>

结果

Array
(
)

我已经搜索并找到了很多方法从simplexml转换为数组,但它们似乎都不起作用。如果有人有解决方案我真的很感激

3 个答案:

答案 0 :(得分:6)

您可以使用serialize这样的功能:

 $_SESSION['foo'] = serialize($array);

然后在另一页上unserialize

 $array = unserialize($_SESSION['foo']);

答案 1 :(得分:0)

查找php的implode函数来'压缩'数组,然后你可以将它存储在'隐藏'表单字段中然后你可以$ _POST到下一页。这就是我以前做过的事情。一旦在第二页中获得了阵列的压缩版本,就可以将其爆炸。

答案 2 :(得分:0)

问题是您无法序列化类SimpleXMLElement的对象(会话数据被序列化)
例如:

serialize(new SimpleXMLElement("<test><x>z</x></test>"));


PHP Fatal error:  Uncaught exception 'Exception' with message 'Serialization of 'SimpleXMLElement' is not allowed' in /home/riad/Рабочий стол/1.php:11
Stack trace:
#0 /home/riad/Рабочий стол/1.php(11): serialize(Object(SimpleXMLElement))
#1 {main}
  thrown in /path on line 11

应该可以使用像

这样的东西
class SimpleXMLElementArray extends ArrayIterator{
    public function __sleep(){
        foreach($this as $k=>$v){
            $this[$k] = $v->asXML();
        }
    }
    public function __wakeup(){
            foreach($this as $k=>$v){
                $this[$k]=new SimpleXMLElemt($v);
        }
 }
 SimpleXMLElementArray($your_array);

但是由于某些原因,如果您不手动使用__sleep

,它也会抛出此异常