XML 节点和值使用 SimpleXMLElement 和 array_walk() 反转
XML node and values reversed using SimpleXMLElement and array_walk()
我正在尝试使用本网站其他地方发布的示例从 PHP 中的数组构建一个 XML 元素。 XML 字符串正在按预期创建,但节点及其值是相反的。例如:
$params = array(
"email" => 'me@gmail.com'
,"pass" => '123456'
,"pass-conf" => '123456'
);
$xml = new SimpleXMLElement('<root/>');
array_walk_recursive($params, array($xml, 'addChild'));
echo $xml->asXML();
现在我期待返回的是:
<?xml version="1.0"?>
<root>
<email>me@gmail.com</email>
<pass>123456</pass>
<pass-conf>123456</pass-conf>
</root>
但是,我不断得到的是节点名称作为值和值作为节点名称:
<?xml version="1.0"?>
<root>
<me@gmail.com>email</me@gmail.com>
<123456>pass</123456>
<123456>pass-conf</123456>
</root>
我已经测试过用 $params
数组中的值切换密钥,但这对我来说似乎是一个懒惰的 hack。我认为问题出在我在 array_walk_recursive
中的回调中,但我不确定如何让它发挥作用。我愿意接受有关将 PHP 数组转换为 XML 的更好方法的建议。我只是试过这个,因为它看起来简单而不复杂。 (哈哈..)
您的代码的问题是 array_walk_recursive
为回调提供参数 value 然后 key (按此顺序).
SimpleXMLElement::addChild
接受参数 name 然后 value (按顺序)。
这是一个不太复杂的解决方案
foreach ($params as $key => $value) {
$xml->addChild($key, $value);
}
我正在尝试使用本网站其他地方发布的示例从 PHP 中的数组构建一个 XML 元素。 XML 字符串正在按预期创建,但节点及其值是相反的。例如:
$params = array(
"email" => 'me@gmail.com'
,"pass" => '123456'
,"pass-conf" => '123456'
);
$xml = new SimpleXMLElement('<root/>');
array_walk_recursive($params, array($xml, 'addChild'));
echo $xml->asXML();
现在我期待返回的是:
<?xml version="1.0"?>
<root>
<email>me@gmail.com</email>
<pass>123456</pass>
<pass-conf>123456</pass-conf>
</root>
但是,我不断得到的是节点名称作为值和值作为节点名称:
<?xml version="1.0"?>
<root>
<me@gmail.com>email</me@gmail.com>
<123456>pass</123456>
<123456>pass-conf</123456>
</root>
我已经测试过用 $params
数组中的值切换密钥,但这对我来说似乎是一个懒惰的 hack。我认为问题出在我在 array_walk_recursive
中的回调中,但我不确定如何让它发挥作用。我愿意接受有关将 PHP 数组转换为 XML 的更好方法的建议。我只是试过这个,因为它看起来简单而不复杂。 (哈哈..)
您的代码的问题是 array_walk_recursive
为回调提供参数 value 然后 key (按此顺序).
SimpleXMLElement::addChild
接受参数 name 然后 value (按顺序)。
这是一个不太复杂的解决方案
foreach ($params as $key => $value) {
$xml->addChild($key, $value);
}