• 技术文章 >后端开发 >PHP问题

    php数组转xml的函数是什么

    藏色散人藏色散人2020-08-26 10:08:11原创439

    php数组转xml的函数是“arr2xml”,其使用方法:首先创建一个php示例文件;然后定义一个“arr2xml”方法;接着通过foreach语句以及“preg_replace”等函数将数组转为xml即可。

    推荐:《PHP视频教程

    PHP中奖数组转为xml的需求是常见的,而且实现方法也有很多种,百度找了一下各种实现方法,但是基本是借组一些组件啥的。我就自己写了一个字符串拼组的方法,支持多维数组。仅供参考,不足之处敬请不吝赐教!

    /**
    *   将数组转换为xml
    *    @param array $data    要转换的数组
    *   @param bool $root     是否要根节点
    *   @return string         xml字符串
    *    @author Dragondean
    *    @url    http://www.cnblogs.com/dragondean*/function arr2xml($data, $root = true){    $str="";    if($root)$str .= "<xml>";    foreach($data as $key => $val){        if(is_array($val)){            $child = arr2xml($val, false);            $str .= "<$key>$child</$key>";
            }else{            $str.= "<$key><![CDATA[$val]]></$key>";
            }
        }    if($root)$str .= "</xml>";    return $str;
    }

    上面是实现的方法,第一个参数是你要转换的数组,第二个可选参数设定是否需要加<xml>根节点,默认是需要的。

    测试代码:

    $arr=array('a'=>'aaa','b'=>array('c'=>'1234' , 'd' => "asdfasdf"));echo arr2xml($arr);

    代码执行后的结果为:

    <xml><a><![CDATA[aaa]]></a><b><c><![CDATA[1234]]></c><d><![CDATA[asdfasdf]]></d></b></xml>

    ---------------------- ----------

    更新:

    在使用过程中发现下面格式的数组转换会出现问题:

    array(    'item' => array(        array(            'title' => 'qwe',
                'description' => 'rtrt',
                'picurl' => 'sdfsd',
                'url' => 'ghjghj'
            ),        array(            'title' => 'jyutyu',
                'description' => 'werwe',
                'picurl' => 'xcvxv',
                'url' => 'ghjgh'
            )
        )
    );

    转换出来的结果是:

    <xml>
        <item>
            <0>
                <title>
                    <![CDATA[qwe]]>
                </title>
                <description>
                    <![CDATA[rtrt]]>
                </description>
                <picurl>
                    <![CDATA[sdfsd]]>
                </picurl>
                <url>
                    <![CDATA[ghjghj]]>
                </url>
            </0>
            <1>
                <title>
                    <![CDATA[jyutyu]]>
                </title>
                <description>
                    <![CDATA[werwe]]>
                </description>
                <picurl>
                    <![CDATA[xcvxv]]>
                </picurl>
                <url>
                    <![CDATA[ghjgh]]>
                </url>
            </1>
        </item></xml>

    通常情况下,上面转换出来的xml整<0><1>那层节点我们是不要的。但是在php中下标有不能同名,不能有多个item。怎么办呢?

    我想了一个办法就是给item下下标,比如item[0],item[1],在转换过程中在去掉[]形式的下标,实现多个item节点并排。

    函数修改后如下:

    function arr2xml($data, $root = true){    $str="";    if($root)$str .= "<xml>";    foreach($data as $key => $val){        //去掉key中的下标[]
            $key = preg_replace('/\[\d*\]/', '', $key);        if(is_array($val)){            $child = arr2xml($val, false);            $str .= "<$key>$child</$key>";
            }else{            $str.= "<$key><![CDATA[$val]]></$key>";
            }
        }    if($root)$str .= "</xml>";    return $str;
    }

    那么上面需要转换的数组也需要跟着变动一下:

    $arr1 =array(    'item[0]' => array(            'title' => 'qwe',
                'description' => 'rtrt',
                'picurl' => 'sdfsd',
                'url' => 'ghjghj'
            ),
        'item[1]' => array(            'title' => 'jyutyu',
                'description' => 'werwe',
                'picurl' => 'xcvxv',
                'url' => 'ghjgh'
            )
    );

    转换后的xml如下:

    <xml>
        <item>
            <title>
                <![CDATA[qwe]]>
            </title>
            <description>
                <![CDATA[rtrt]]>
            </description>
            <picurl>
                <![CDATA[sdfsd]]>
            </picurl>
            <url>
                <![CDATA[ghjghj]]>
            </url>
        </item>
        <item>
            <title>
                <![CDATA[jyutyu]]>
            </title>
            <description>
                <![CDATA[werwe]]>
            </description>
            <picurl>
                <![CDATA[xcvxv]]>
            </picurl>
            <url>
                <![CDATA[ghjgh]]>
            </url>
        </item></xml>

    以上就是php数组转xml的函数是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php xml
    上一篇:php地址栏如何隐藏参数 下一篇:php 整除取整的方法总结
    大前端线上培训班

    相关文章推荐

    • PHP DOMDocument保存xml时中文出现乱码问题• php数组怎么转xml• php如何修改 xml 文件• php array如何转xml

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网