当我想将SimpleXML对象添加到数组或执行array_map
甚至是这样的简单事情时:
$menu[] = $data;
// $data is SimpleXML Object.
导致It is not yet possible to assign complex types to properties
错误。这是我尝试过的一些代码:
//$data is SimpleXML object from $datas.
//$datas is SimpleXML object contains "Module" elements:
$menu[] = $data;
没有运气:仍然会导致错误。我使用foreach来获取$ data。这就是原因。我已经尝试foreach((array) $datas->Module as $data)
,也没有运气。
$menu = array_map(function($data) {
return data;
}, $datas->Module);
这可能是一个最愚蠢的解决方案,但我也添加了(array)
,但没有运气。
$i=0; $menu = [];
foreach($datas as $data){
$menu[$i] = $data;
$i++;
}
array_push($menu, $data);
一切都没用T ^ T.如何正确地将SimpleXML对象添加到数组中(推送它)?
修改
XML字符串:
<Module name="Administrative Task" url="Admin" icon="glyphicon glyphicon-list-alt" rule_name="url_administrative" rule_min="R">
<Submodule name="User Management" url="User">
<Proccess name="Add New" url="New"/>
</Submodule>
</Module>
<Module name="Lisencing Systems" url="Lisensi" icon="glyphicon glyphicon-book" rule_name="url_licensing" rule_min="RWUD">
<Submodule name="User Management" url="User">
<Proccess name="Add New" url="New"/>
</Submodule>
</Module>
答案 0 :(得分:-1)
为什么不像下面那样更改XML字符串。
<?php error_reporting(E_ALL);
$xml = '<?xml version="1.0" encoding="UTF-8"?>
<row>
<Module>
<name>Administrative Task</name>
<url>Admin</url>
<icon>glyphicon glyphicon-list-alt</icon>
<rule_name>url_administrative</rule_name>
<rule_min>R</rule_min>
<Submodule>
<name>User Management</name>
<url>User</url>
<Proccessname>Add New</Proccessname>
<url>New</url>
</Submodule>
</Module>
<Module>
<name>Lisencing Systems</name>
<url>Lisensi</url>
<icon>glyphicon glyphicon-book</icon>
<rule_name>url_licensing</rule_name>
<rule_min>RWUD</rule_min>
<Submodule>
<name>User Management</name>
<url>User</url>
<Proccessname>Add New</Proccessname>
<url>New</url>
</Submodule>
</Module>
</row>';
$simple = simplexml_load_string($xml);
// var_dump($simple);
$arr = json_decode( json_encode($simple) , 1);
echo '<pre>';
print_r($arr);
echo '</pre>';