数组和对象、XML之间的相互转化

        在接口开发中,数据返回APP端会要求比较严格,会要求空的数组转成空的对象。

        即 [] 返回 {}, 只需要在数组数据为空的时候,做一下特殊的处理。

        空数组转空对象

$return = array(
    'flag'      => '001',
    'content'   => array(
        'list'  => []
    )
);
echo json_encode($return);

$return = array(
    'flag'      => '001',
    'content'   => array(
        'list'  => $list ?: (new stdClass())   //
    )
);
echo json_encode($return);


        对象(object) 与 数组(array) 的转换

/**
* 数组 转 对象
* @param array $arr 数组
* @return object
*/
function array_to_object($arr) {
    if (gettype($arr) != 'array') {
        return;
    }
    foreach ($arr as $k => $v) {
        if (gettype($v) == 'array' || getType($v) == 'object') {
            $arr[$k] = (object)array_to_object($v);
        }
    }
    return (object)$arr;
}
/**
* 对象 转 数组
* @param object $obj 对象
* @return array
*/
function object_to_array($obj) {
    $obj = (array)$obj;
    foreach ($obj as $k => $v) {
        if (gettype($v) == 'resource') {
            return;
        }
        if (gettype($v) == 'object' || gettype($v) == 'array') {
            $obj[$k] = (array)object_to_array($v);
        }
    }
    return $obj;
}


        对象转数组

//1、PHP stdClass Object转array  
function object_array($array) {  
    if(is_object($array)) {  
        $array = (array)$array;  
     } if(is_array($array)) {  
         foreach($array as $key=>$value) {  
             $array[$key] = object_array($value);  
             }  
     }  
     return $array;  
}

//2、
$array = json_decode(json_encode(simplexml_load_string($xmlString)),TRUE);

//3、但是对json的特性,只能是针对utf8的,否则得先转码下。
function object2array(&$object) {
     $object =  json_decode( json_encode( $object),true);
     return  $object;
}


        PHP将数组转换成XML

//PHP可以将数组转换成xml格式,简单的办法是遍历数组,然后将数组的key/value转换成xml节点,再直接echo输出了,如:
function arrayToXml($arr){
    $xml = "<root>";
    foreach ($arr as $key=>$val){
        if(is_array($val)){
            $xml.="<".$key.">".arrayToXml($val)."</".$key.">";
        }else{
            $xml.="<".$key.">".$val."</".$key.">";
        }
    }
    $xml.="</root>";
    return $xml;
}
最简单,速度又快,支持多维数组,中文也不会乱码。
 
 
////利用DOMDocument来生成xml结构:
function arrayToXml($arr,$dom=0,$item=0){
    if (!$dom){
        $dom = new DOMDocument("1.0");
    }
    if(!$item){
        $item = $dom->createElement("root");  
        $dom->appendChild($item);
    }
    foreach ($arr as $key=>$val){
        $itemx = $dom->createElement(is_string($key)?$key:"item");
        $item->appendChild($itemx);
        if (!is_array($val)){
            $text = $dom->createTextNode($val);
            $itemx->appendChild($text);
              
        }else {
            arrayToXml($val,$dom,$itemx);
        }
    }
    return $dom->saveXML();
}
它同样可以将数组转换成xml,而且支持多维数组,生成的xml中文也不会乱码。


        PHP将XML转换成数组

        做接口开发的时候经常会碰到别人提交给你的是xml格式的数据,常见的微信接口、支付宝接口等,他们的接口如发送消息通信都是xml格式的,那么我们先想办法拿到这个xml数据,然后再将其转化成数组。假设我们获取到一个这样的XML:

<root>
    <user>月光光abcd</user>
    <pvs>13002</pvs>
    <ips>
        <baidu_ip>1200</baidu_ip>
        <google_ip>1829</google_ip>
    </ips>
    <date>2016-06-01</date>
</root>
 
 
 
通过simplexml_load_string()解析读取xml数据,然后先转成json格式,再转换成数组。
function xmlToArray($xml){     
    //禁止引用外部xml实体
    libxml_disable_entity_loader(true);
    $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
    $val       = json_decode(json_encode($xmlstring),true);   
    return $val;
}
 
----------------------------------------------------
 
//xml转换成array
header("Content-type: text/html; charset=utf-8");
function xmlToarray($xml){
    $obj  = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
    $json = json_encode($obj);
    $arr  = json_decode($json, true);
    return $arr;
}
var_dump(xmlToarray($xml));



冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论