php多维数组怎么转换json(php实现的数组转xml案例分析)
类别:编程学习 浏览量:2357
时间:2021-10-15 00:18:50 php多维数组怎么转换json
php实现的数组转xml案例分析本文实例讲述了php实现的数组转xml。分享给大家供大家参考,具体如下:
0x00 需求
最近要做百度、360、神马搜索的网站sitemap,三家的格式都是xml,然而具体的细节还有有差别的。
一开始用的是dom,没有使用sax,写了几段便觉得太傻了,想到有没有数组转xml的库呢?
0x01 array2xml
搜索了一下,还真有地址为git,于是开始撸起袖子开始干。
示例如下:
THE CODE:
|
$xml = new ArrayToXML(); print $xml ->buildXML( $input ); |
INPUT:
|
$input = array ( 'product' => array ( '@id' => 7, 'name' => 'some string' , 'seo' => 'some-string' , 'ean' => '' , 'producer' => array ( 'name' => null, 'photo' => '1.png' ), 'stock' => 123, 'trackstock' => 0, 'new' => 0, 'pricewithoutvat' => 1111, 'price' => 1366.53, 'discountpricenetto' => null, 'discountprice' => null, 'vatvalue' => 23, 'currencysymbol' => 'PLN' , '#description' => '' , '#longdescription' => '' , '#shortdescription' => '' , 'category' => array ( 'photo' => '1.png' , 'name' => 'test3' , ), 'staticattributes' => array ( 'attributegroup' => array ( 1 => array ( '@name' => 'attributes group' , 'attribute' => array ( 0 => array ( 'name' => 'second' , 'description' => 'desc2' , 'file' => '' , ), 1 => array ( 'name' => 'third' , 'description' => 'desc3' , 'file' => '' , ), ) ) ) ), 'attributes' => array (), 'photos' => array ( 'photo' => array ( 0 => array ( '@mainphoto' => '1' , '%' => '1.png' , ), 1 => array ( '@mainphoto' => '0' , '%' => '2.png' , ), 2 => array ( '@mainphoto' => '0' , '%' => '3.png' , ) ) ) )); |
OUTPUT (XML data):
|
<? xml version = "1.0" encoding = "UTF-8" ?> < data > < product id = "8" > < description ><[CDATA[]]></ description > < longdescription ><[CDATA[]]></ longdescription > < shortdescription ><[CDATA[]]></ shortdescription > < name >some string</ name > < seo >some-string</ seo > < ean ></ ean > < producer > < name ></ name > < photo >1.png</ photo > </ producer > < stock >123</ stock > < trackstock >0</ trackstock > < new >0</ new > < pricewithoutvat >1111</ pricewithoutvat > < price >1366.53</ price > < discountpricenetto ></ discountpricenetto > < discountprice ></ discountprice > < vatvalue >23</ vatvalue > < currencysymbol >PLN</ currencysymbol > < category > < photo >1.png</ photo > < name >test3</ name > </ category > < staticattributes > < attributegroup name = "attributes group" > < attribute > < name >second</ name > < description >< p >desc2</ p ></ description > < file ></ file > </ attribute > < attribute > < name >third</ name > < description >< p >desc3</ p ></ description > < file ></ file > </ attribute > </ attributegroup > </ staticattributes > < photos > < photo mainphoto = "1" >1.png</ photo > < photo mainphoto = "0" >2.png</ photo > < photo mainphoto = "0" >3.png</ photo > </ photos > </ product > </ data > |
可以看到,# 表示CDATA,@表示属性,%代表有属性时这个元素本身的值,非常简洁。
另外数组要把重复元素提到外面作为数组的key,重复元素的各种属性是数组的值,并不需要像上面那样指定 0、1、2索引,直接用就可以了。
0x02 改进
可是发现有一个bug,根节点不能以CDATA开始。
另外还缺少一个功能,CDATA和属性不能同时存在。
于是阅读源码,改进了这两项,提交给了作者,并被合并了。
我额外增加了一个符号 “!” ,当CDATA 和属性同时存在时,写法为:
|
$input = [ "key" =>[ "@id" => 1, "!" => 2 ] ] |
<key id="1"><![CDATA[2]]></key>
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://www.cnblogs.com/xdao/p/php_array2xml.html
您可能感兴趣
- php cookie(php更新cookie内容的详细方法)
- php运行实例(php实例化一个类的具体方法)
- phpstudy如何域名访问(phpStudy2016 配置多个域名期间遇到的问题小结)
- 如何解决php跨域问题(php简单检测404页面的方法示例)
- thinkphp3.2.3 接口开发(ThinkPHP3.2.3框架Memcache缓存使用方法实例总结)
- php 结果集转json(PHP的JSON封装、转变及输出操作示例)
- php面向对象怎么用(PHP面向对象程序设计之对象克隆clone和魔术方法__clone用法分析)
- php 日志监控(php日志函数error_log用法实例分析)
- php怎么实现多线程(PHP实现的多进程控制demo示例)
- thinkphp导入excel(Yii框架使用PHPExcel导出Excel文件的方法分析改进版)
- php在已有目录下创建文件(php写入文件不覆盖的实例讲解)
- php如何异步操作(php链式操作的实现方式分析)
- php对象模型(PHP数据对象映射模式实例分析)
- php中把字符串分开的函数(PHP字符串中抽取子串操作实例分析)
- thinkphp兼容dedecms(DedeCMS Error:Tag disabled:"php"的解决办法)
- php的底层分析(PHP反射原理与用法深入分析)
- 爱情可以当饭吃吗(怎么回复)
- 高考数学题(高考数学题基础题占多少分)
- 没钱只能吃土(没钱要吃土了幽默短信发朋友圈)
- 今年考高会很难吗(今年高考会考试吗)
- 盘古开天地 他创造了世界,谁创造了盘古 盘古是伏羲吗(盘古开天地他创造了世界)
- 关于队徽 你了解这些么 二(关于队徽你了解这些么)
热门推荐
- vue三种判断条件(Vue中插槽和过滤器的深入讲解)
- php 抽象类和接口(php抽象类和接口知识点整理总结)
- mysql给字段加默认值(MySQL 如何处理隐式默认值)
- 开发者微信公众号开发流程(微信公众平台开发教程⑥ 微信开发集成类的使用图文详解)
- pytorch入门与实战(详解PyTorch基本操作)
- vmware esxi 网络配置(探索VMware ESXI CLI常用命令)
- Visual Studio中使用正则表达式替换
- ubuntu20.04开启ssh(详解Ubuntu20.04用Xshell通过SSH连接报错的服务问题)
- html5的canvas代码(H5最强接口之canvas实现动态图形功能)
- mysql 自定义排序
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9