[PHP] Object array xml json 互转

347 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它 value| 转|Value -------- | ----- | ------ Object|转|array xml|转|Object array|转|xml array|转|Object json_encode|区别|json_decode

  • Object转array
/*
 Object转array
 */
    function objectToArray($array)
    {
        if (is_object($array)) {
            $array = (array) $array;
        }if (is_array($array)) {
            foreach ($array as $key => $value) {
                $array[$key] = objectToArray($value);
            }
        }
        return $array;
    }
  • 解析xml文档,转化为对象

由于解析xml的时候,即使被解析的变量为空,依然不会报错,会返回一个空的对象,所以,我们这里做了处理,当被解析的变量不是字符串,或者该变量为空,直接返回false

/**
* 解析xml文档,转化为对象
* @param  String $xmlStr xml文档
* @return Object         返回Obj对象
*/
   function xmlToObject($xmlStr)
   {
       if (!is_string($xmlStr) || empty($xmlStr)) {
           return false;
       }
       // 由于解析xml的时候,即使被解析的变量为空,依然不会报错,会返回一个空的对象,所以,我们这里做了处理,当被解析的变量不是字符串,或者该变量为空,直接返回false
       libxml_disable_entity_loader(true);
       $postObj = json_decode(json_encode(simplexml_load_string($xmlStr, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
       //将xml数据转换成对象返回
       return $postObj;
   }
  • 数组转xml字符
/**
 * 数组转xml字符
 * @param  string   $xml xml字符串
 **/
    function arrayToXml($data)
    {
        if (!is_array($data) || count($data) <= 0) {
            return false;
        }
        $xml = "<xml>";
        foreach ($data as $key => $val) {
            if (is_numeric($val)) {
                $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
            } else {
                $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
            }
        }
        $xml .= "</xml>";
        return $xml;
    }
  • 数组转对象
/*
* 数组转对象
* json_encode()
* 示例:
*   $arr_1 = ['one', 'two', 'three'];
      var_dump(json_encode($arr_1));
*/
json_encode()
  • json_encode 区别 json_decode

json_encode(); //输出一个json数据
json_decode($data,true);//输出的一个关联数组
json_encode()和json_decode();//是编译和反编译过程,注意json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。 解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来即可. 不妨可以试试看