PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

PHP XML和数组互相转换详解

管理员 2025-02-21
工作总结
41

在 PHP 中,XML 和数组之间的互相转换是常见的操作。以下是详细的实现方法和示例代码。


1. XML 转数组

将 XML 数据转换为数组,可以使用 SimpleXML 或 DOMDocument

方法 1:使用 SimpleXML

SimpleXML 是一个简单易用的 XML 解析器。

示例代码

php
复制
<?php$xmlString = <<<XML<books>
    <book>
        <title>PHP Basics</title>
        <author>John Doe</author>
        <year>2021</year>
    </book>
    <book>
        <title>Advanced PHP</title>
        <author>Jane Smith</author>
        <year>2022</year>
    </book>
</books>XML;// 解析 XML 字符串$xml = simplexml_load_string($xmlString);// 将 SimpleXML 对象转换为数组$array = json_decode(json_encode($xml), true);print_r($array);?>

输出

plaintext
复制
Array
(
    [book] => Array
        (
            [0] => Array
                (
                    [title] => PHP Basics
                    [author] => John Doe
                    [year] => 2021
                )

            [1] => Array
                (
                    [title] => Advanced PHP
                    [author] => Jane Smith
                    [year] => 2022
                )
        )
)

方法 2:使用 DOMDocument

DOMDocument 是一个功能强大的 XML 解析器。

示例代码

php
复制
<?php$xmlString = <<<XML<books>
    <book>
        <title>PHP Basics</title>
        <author>John Doe</author>
        <year>2021</year>
    </book>
    <book>
        <title>Advanced PHP</title>
        <author>Jane Smith</author>
        <year>2022</year>
    </book>
</books>XML;// 创建 DOMDocument 对象$dom = new DOMDocument();$dom->loadXML($xmlString);// 将 DOMDocument 转换为数组function domToArray($node) {
    $array = [];
    foreach ($node->childNodes as $childNode) {
        if ($childNode->nodeType === XML_ELEMENT_NODE) {
            $array[$childNode->nodeName] = domToArray($childNode);
        } else {
            $array = $childNode->nodeValue;
        }
    }
    return $array;}$array = domToArray($dom);print_r($array);?>

输出

plaintext
复制
Array
(
    [books] => Array
        (
            [book] => Array
                (
                    [0] => Array
                        (
                            [title] => PHP Basics
                            [author] => John Doe
                            [year] => 2021
                        )

                    [1] => Array
                        (
                            [title] => Advanced PHP
                            [author] => Jane Smith
                            [year] => 2022
                        )
                )
        )
)

2. 数组转 XML

将数组转换为 XML 数据,可以使用 SimpleXML 或手动拼接 XML 字符串。

方法 1:使用 SimpleXML

SimpleXML 提供了创建 XML 数据的方法。

示例代码

php
复制
<?php$array = [
    'books' => [
        'book' => [
            [
                'title' => 'PHP Basics',
                'author' => 'John Doe',
                'year' => '2021',
            ],
            [
                'title' => 'Advanced PHP',
                'author' => 'Jane Smith',
                'year' => '2022',
            ],
        ],
    ],];// 创建 SimpleXMLElement 对象$xml = new SimpleXMLElement('<root/>');// 递归将数组转换为 XMLfunction arrayToXml($array, $xml) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            if (is_numeric($key)) {
                $key = 'item'; // 处理数字键
            }
            $subNode = $xml->addChild($key);
            arrayToXml($value, $subNode);
        } else {
            $xml->addChild($key, htmlspecialchars($value));
        }
    }}arrayToXml($array, $xml);// 输出 XMLecho $xml->asXML();?>

输出

xml
复制
<root>
    <books>
        <book>
            <title>PHP Basics</title>
            <author>John Doe</author>
            <year>2021</year>
        </book>
        <book>
            <title>Advanced PHP</title>
            <author>Jane Smith</author>
            <year>2022</year>
        </book>
    </books></root>

方法 2:手动拼接 XML 字符串

手动拼接 XML 字符串是一种灵活的方式。

示例代码

php
复制
<?php$array = [
    'books' => [
        'book' => [
            [
                'title' => 'PHP Basics',
                'author' => 'John Doe',
                'year' => '2021',
            ],
            [
                'title' => 'Advanced PHP',
                'author' => 'Jane Smith',
                'year' => '2022',
            ],
        ],
    ],];// 递归将数组转换为 XML 字符串function arrayToXmlString($array, $indent = '') {
    $xml = '';
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $xml .= "$indent<$key>\n";
            $xml .= arrayToXmlString($value, $indent . '    ');
            $xml .= "$indent</$key>\n";
        } else {
            $xml .= "$indent<$key>" . htmlspecialchars($value) . "</$key>\n";
        }
    }
    return $xml;}$xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";$xmlString .= arrayToXmlString($array);echo $xmlString;?>

输出

xml
复制
<?xml version="1.0" encoding="UTF-8"?><books>
    <book>
        <title>PHP Basics</title>
        <author>John Doe</author>
        <year>2021</year>
    </book>
    <book>
        <title>Advanced PHP</title>
        <author>Jane Smith</author>
        <year>2022</year>
    </book></books>

3. 总结

操作方法优点缺点
XML 转数组SimpleXML简单易用不适合复杂 XML 结构
XML 转数组DOMDocument功能强大代码复杂
数组转 XMLSimpleXML简单易用需要递归处理
数组转 XML手动拼接 XML 字符串灵活可控代码复杂

根据具体需求选择合适的方法:

  • 对于简单的 XML 和数组转换,推荐使用 SimpleXML

  • 对于复杂的 XML 结构,推荐使用 DOMDocument 或手动拼接 XML 字符串。



本文关键词: PHP XML 数组 互相 转换 详解

希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部