Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用SimpleXMLElement和数组_walk()反转XML节点和值_Php_Arrays_Xml_Converter_Nodes - Fatal编程技术网

Php 使用SimpleXMLElement和数组_walk()反转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/>');

我试图使用本网站其他地方发布的一个示例,从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();
$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]])