2016-08-04 7 views
1

Wenn ich ein SimpleXML Objekt zu einem Array hinzufügen möchten oder tun array_map oder auch einfache Dinge wie diese:Hinzufügen SimpleXML zu Array verursacht seltsame Verhalten

$menu[] = $data; 
// $data is SimpleXML Object. 

verursacht It is not yet possible to assign complex types to properties Fehler. Dies ist ein Code, den ich ausprobiert habe:

Kein Glück: Noch verursacht Fehler. Ich benutze foreach, um die $ Daten zu erhalten. Das ist der Grund. Ich habe versucht foreach((array) $datas->Module as $data), kein Glück auch.


$menu = array_map(function($data) { 
    return data; 
}, $datas->Module); 

dies vielleicht eine dümmste Lösung, aber ich hinzugefügt zu (array), und kein Glück.


$i=0; $menu = []; 
foreach($datas as $data){ 
    $menu[$i] = $data; 
    $i++; 
} 

array_push($menu, $data); 

Alles ist sinnlos T^T. Wie man es richtig macht, SimpleXML-Objekt zu einem Array hinzufügen (Pushing it)?

EDIT

XML String:

<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

In Ihrer Zeile 'array_map' übergeben Sie' $ datas-> Module', das kein Array ist, sondern ein SimpleXMLElement-Objekt. Die '$ menu [] = $ data' Zeile sollte gut funktionieren, genauso wie die' foreach': https://3v4l.org/0HIKE – IMSoP

+0

Ich kann den Fehler, den Sie gegeben haben, nicht reproduzieren. Bitte bearbeite die Frage so, dass sie eine [mcve] enthält, damit wir verstehen können, woher der Fehler kommt. – IMSoP

+0

Ich habe die Frage aktualisiert, ich benutze PHP 5.6.1, hängt das mit meiner PHP-Engine zusammen? – Kekesed

Antwort

-1

Warum Sie nicht über Ihre XML-Zeichenfolge wie unten ändern.

<?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>'; 
+0

Das Ändern der Struktur der Eingabe ist sehr selten eine Option, und ich bin nicht sicher, warum es in diesem Fall notwendig wäre. Außerdem glaube ich fest daran, dass der Trick 'json_decode (json_encode())' weit mehr Probleme schafft, als er löst. – IMSoP

+0

Ich habe versucht, die XML-Zeichenfolge, die ** Kekesed ** in seiner Frage zur Verfügung gestellt. Aber die 'simplexml_load_string()' gibt kein Ergebnis, wenn ich dieselbe XML-Zeichenfolge verwende. Deshalb habe ich die Struktur geändert. Aber ich habe keine Ahnung, wie der 'json_decode (json_encode())' in diesem Fall funktioniert. – sriram

+0

Sicher, aber das ist wie zu sagen "Ich habe versucht in dein Haus zu kommen, aber ich konnte die Haustür nicht finden, also ging ich stattdessen zu meinem eigenen Haus". Die meiste Zeit versuchen die Leute, die Daten anderer Personen zu parsen, also hilft es nicht, "einen anderen Eingang zu benutzen". – IMSoP