2017-03-28 6 views
0

Ich versuche, ein XML-Element aus einem Array in PHP mit einem Beispiel, das an anderer Stelle auf dieser Website veröffentlicht wurde, zu erstellen. Die XML-Zeichenfolge wird wie erwartet erstellt, die Knoten und ihre Werte werden jedoch umgekehrt. Zum Beispiel:XML-Knoten und Werte mit SimpleXMLElement und array_walk() umgekehrt

$params = array(
     "email" => '[email protected]' 
     ,"pass" => '123456' 
     ,"pass-conf" => '123456' 
    ); 
    $xml = new SimpleXMLElement('<root/>'); 
    array_walk_recursive($params, array($xml, 'addChild')); 
    echo $xml->asXML(); 

Nun, was ich erwarte, ist zu zurückgegeben werden:

<?xml version="1.0"?> 
    <root> 
    <email>[email protected]</email> 
    <pass>123456</pass> 
    <pass-conf>123456</pass-conf> 
    </root> 

Doch was halten I ist die Knotennamen als Werte und Werte als Knotennamen bekommen:

<?xml version="1.0"?> 
    <root> 
    <[email protected]>email</[email protected]> 
    <123456>pass</123456> 
    <123456>pass-conf</123456> 
    </root> 

Ich habe getestet, den Schlüssel mit dem Wert im $params Array zu wechseln, aber das scheint wie ein fauler Hack für mich. Ich glaube, das Problem liegt in meinem Rückruf in array_walk_recursive, aber ich bin mir nicht sicher, wie genau es funktioniert. Ich bin offen für Empfehlungen zu besseren Möglichkeiten, ein PHP-Array in XML zu konvertieren. Ich habe das gerade versucht, weil es einfach und nicht gewunden zu sein schien. (Haha ..)

+0

[ 'array_walk_recursive'] (http://php.net/manual/en/function.array-walk-recursive.php) ~ * "In der Regel übernimmt Callback zwei Parameter. Der ** - Wert des Array-Parameters ist der erste ** und der ** Schlüssel/Index-Sekunde **. *". ['SimpleXMLElement :: addChild'] (http://php.net/manual/de/simplexmlelement.addchild.php) ~ *" addChild (** string $ name ** [, ** string $ value ** [, Zeichenfolge $ Namespace]]) "* – Phil

Antwort

1

Das Problem mit Ihrem Code ist, dass array_walk_recursive liefert den Rückruf mit den Argumenten Wert dann Schlüssel (in dieser Reihenfolge).

SimpleXMLElement::addChild nimmt die Argumente Name dann Wert (in dieser Reihenfolge).


Hier ist eine weniger gewundene Lösung

foreach ($params as $key => $value) { 
    $xml->addChild($key, $value); 
} 

https://3v4l.org/oOHSb