将SimpleXML添加到数组会导致奇怪的行为

时间:2016-08-04 21:53:22

标签: php simplexml

当我想将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>

1 个答案:

答案 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>';