我是编程和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转换为数组,但它们似乎都不起作用。如果有人有解决方案我真的很感激
答案 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