2016-04-16 8 views
0

Ich habe eine XML-Struktur:Handhabung simplexml zu Array elegant

<node1><node2><child_1/><child_2/><child_3/></node2></node1> 

und ich möchte ein Array wie folgt erhalten:

['child_1', 'child_2', 'child_3'] 

Aber zu meiner Methode zum Erstellen dieser Griff Fehler elegant zu machen und gebe ein leeres Array zurück, wenn nichts gefunden wird:

public function testXmlParse() 
{ 
    $config = new SimpleXMLElement("<node1><node2><child_1/><child_2/><child_3/></node2></node1>"); 
    $result = $config->xpath('/node1/node2'); 

    if (! count($result)) { 
     return []; 
    } 

    $result = $result[0]->children(); 
} 

Aber ich habe noch mehr Code zu w Rite, um nach Arrays und gültig usw. zu überprüfen

Gibt es eine elegante Möglichkeit, das richtige Ergebnis zu erhalten und 0 auf nichts zu finden zurückgeben?

Antwort

0

Der Code, den Sie geschrieben haben, wird sowieso kein Array zurückgeben - das Ergebnis von ->children() ist ein iterierbares Objekt SimpleXMLElement. Sie können jedoch die Tatsache ausnutzen, dass ein Objekt mit null Elementen immer noch mit foreach iterierbar ist und einfach null Mal umgeht.

Da Sie immer nach der ersten Übereinstimmung suchen, kann Ihr Beispiel auch den SimpleXML-Zugriff anstelle von XPath verwenden, um die zusätzliche Logik dort zu vermeiden.

$config = new SimpleXMLElement("<node1><node2><child_1/><child_2/><child_3/></node2></node1>"); 
// Start with an empty array; if no children are found, it will stay empty 
$results = []; 
// Note: $config represents the <node1> element, not the document 
foreach ($config->node2->children() as $name => $element) { 
    $results[] = $name; 
} 

Wenn <node2> nicht immer vorhanden ist, müssen Sie möglicherweise eine zusätzliche if (isset($config->node2)) um die Schleife hinzuzufügen, PHP zu vermeiden Sie Warnungen zu werfen.