首页 > 后端开发 > PHP问题 > php数组转xml的函数是什么

php数组转xml的函数是什么

藏色散人
发布: 2023-03-05 08:50:01
原创
2479 人浏览过

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

php数组转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;
}
登录后复制

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

测试代码:

$arr=array(&#39;a&#39;=>&#39;aaa&#39;,&#39;b&#39;=>array(&#39;c&#39;=>&#39;1234&#39; , &#39;d&#39; => "asdfasdf"));echo arr2xml($arr);
登录后复制

代码执行后的结果为:

<xml><a><![CDATA[aaa]]></a><b><c><![CDATA[1234]]></c><d><![CDATA[asdfasdf]]></d></b></xml>
登录后复制

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

更新:

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

array(    &#39;item&#39; => array(        array(            &#39;title&#39; => &#39;qwe&#39;,
            &#39;description&#39; => &#39;rtrt&#39;,
            &#39;picurl&#39; => &#39;sdfsd&#39;,
            &#39;url&#39; => &#39;ghjghj&#39;
        ),        array(            &#39;title&#39; => &#39;jyutyu&#39;,
            &#39;description&#39; => &#39;werwe&#39;,
            &#39;picurl&#39; => &#39;xcvxv&#39;,
            &#39;url&#39; => &#39;ghjgh&#39;
        )
    )
);
登录后复制

转换出来的结果是:

<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(&#39;/\[\d*\]/&#39;, &#39;&#39;, $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(    &#39;item[0]&#39; => array(            &#39;title&#39; => &#39;qwe&#39;,
            &#39;description&#39; => &#39;rtrt&#39;,
            &#39;picurl&#39; => &#39;sdfsd&#39;,
            &#39;url&#39; => &#39;ghjghj&#39;
        ),
    &#39;item[1]&#39; => array(            &#39;title&#39; => &#39;jyutyu&#39;,
            &#39;description&#39; => &#39;werwe&#39;,
            &#39;picurl&#39; => &#39;xcvxv&#39;,
            &#39;url&#39; => &#39;ghjgh&#39;
        )
);
登录后复制

转换后的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.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板