php使用递归方法将多维数组转换为xml

时间:2016-06-24
本文章向大家介绍php如何使用递归的方法将多维数组转换为xml,实例讲解了php递归函数的使用方法和php操作数组和xml的一些技巧,具有一定的阅读价值,需要的朋友可以参考一下。

XML可扩展标记语言是一个很好的旧数据交换格式,现在基本已经被json取代了。但可悲的是在WEB开发中XML仍然存在并用于存储和交换数据。如果你想学习xml的相关知识,那么本教程对你将有很大的帮助。

PHP将多维数组转换为xml

下面是我们要实现PHP多维数组转换XML的步骤。

步骤1:创建一个名称为array2XML()的函数,该函数用于将数组换换为XML:该功能将通过给定的多维数组不断迭代,并添加每个(键,值)对与PHP的的帮助下单独的XML节点的SimpleXML类。

步骤-2:接着定义PHP关联或多维数组进行转换。

步骤3:创建的SimpleXML类的新实例。

步骤4:回调到函数array2XML()的阵列到一个XML对象(在步骤2中定义)转换。

步骤5:最后保存生成的XML作为文件。

代码如下:

<?php
// function to convert multi-dimensional array to xml
function array2XML($obj, $array)
{
    foreach ($array as $key => $value)
    {
        if(is_numeric($key))
            $key = 'item' . $key;

        if (is_array($value))
        {
            $node = $obj->addChild($key);
            array2XML($node, $value);
        }
        else
        {
            $obj->addChild($key, htmlspecialchars($value));
        }
    }
}

// define php multi-dimensional array
$my_array = array (
    '0' => array (
        'id' => 'XYZ100',
        'personal' => array (
            'name' =>'Ashton Cox',
            'gender' => 'Male',
            'age' => 32,
            'address' => array (
                 'street' => '7 24th Street',
                 'city' => 'New York',
                 'state' => 'NY',
                 'zipcode' => '10038'
             )
        ),
        'profile' => array (
            'position' => 'Team Lead',
            'department' => 'Software'
        )
    ),
    '1' => array (
        'id' => 'XYZ121',
        'personal' => array (
            'name' => 'Rhona Davidson',
            'gender' => 'Female',
            'age' => 40,
            'address' => array (
                 'street' => 'S2 115th Street',
                 'city' => 'New York',
                 'state' => 'NY',
                 'zipcode' => '10100'
             )
        ),
        'profile' => array (
            'position' => 'Integration Specialist',
            'department' => 'Operations'
        )
    )
);

// create new instance of simplexml
$xml = new SimpleXMLElement('<root/>');

// function callback
array2XML($xml, $my_array);

// save as xml file
echo (($xml->asXML('data.xml')) ? 'Your XML file has been generated successfully!' : 'Error generating XML file!');
?>

正如你可以看到array2XML()是一个递归函数,几乎经过多次深度解析数组。这也将与数字键关联数组工作,并将其作为<item0> <item1>为XML不允许像数字键控节点<0> <1> <2> ......并把他们视为无效。

该方法的addChild()将一个XML节点添加到该对象。

声明新的SimpleXMLElement(“<root/>');将创建一个XML对象与顶级节点<root> </root>

该生产线$ XML-> asXML(“data.xml')将保存XML字符串为”data.xml'文件。请务必提供保存在不同位置的文件的完整文件路径。

现在运行上面的脚本,并没有任何错误生成的XML文件。