我正在尝试使用在本网站其他地方发布的示例从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
数组中的值切换密钥,但这对我来说似乎是一个懒惰的黑客。我认为这个问题存在于我array_walk_recursive
的回调中,但我不确定如何让它发挥作用。我对有关将PHP数组转换为XML的更好方法的建议持开放态度。我只是尝试了这个,因为它看似简单而且没有错综复杂。 (哈哈..)
答案 0 :(得分:1)
您的代码存在的问题是array_walk_recursive
使用参数 value 然后 key (按此顺序)提供回调。
SimpleXMLElement::addChild
接受参数 name 然后 value (按此顺序)。
这是一个不太复杂的解决方案
foreach ($params as $key => $value) {
$xml->addChild($key, $value);
}