Php 使用SimpleXMLElement和数组_walk()反转XML节点和值
我试图使用本网站其他地方发布的一个示例,从PHP中的数组构建一个XML元素。正在按预期创建XML字符串,但是节点及其值是反向的。例如:Php 使用SimpleXMLElement和数组_walk()反转XML节点和值,php,arrays,xml,converter,nodes,Php,Arrays,Xml,Converter,Nodes,我试图使用本网站其他地方发布的一个示例,从PHP中的数组构建一个XML元素。正在按预期创建XML字符串,但是节点及其值是反向的。例如: $params = array( "email" => 'me@gmail.com' ,"pass" => '123456' ,"pass-conf" => '123456' ); $xml = new SimpleXMLElement('<root/>');
$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();
$params=array(
“电子邮件”=>”me@gmail.com'
,“通过”=>“123456”
,“通过配置”=>“123456”
);
$xml=新的SimpleXMLElement(“”);
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>
me@gmail.com
123456
123456
但是,我一直得到的是作为值的节点名和作为节点名的值:
<?xml version="1.0"?>
<root>
<me@gmail.com>email</me@gmail.com>
<123456>pass</123456>
<123456>pass-conf</123456>
</root>
电子邮件
通过
通行证
我已经测试过用
$params
数组中的值切换键,但这对我来说似乎是一个懒惰的攻击。我相信这个问题存在于我在array\u walk\u recursive
中的回调中,但我不确定如何确切地使它工作。我愿意听取关于将PHP数组转换为XML的更好方法的建议。我只是尝试了一下,因为它看起来很简单,不复杂。(哈哈…)代码的问题是数组\u walk\u recursive
为回调提供参数值,然后按该顺序键
SimpleXMLElement::addChild
接受参数名称,然后是值(按该顺序)
这里有一个不那么复杂的解决方案
foreach ($params as $key => $value) {
$xml->addChild($key, $value);
}
~“回调通常有两个参数。数组参数的值是第一个,键/索引是第二个。”addChild(字符串$name[,字符串$value[,字符串$namespace]])