在接口开发中,数据返回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));
本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn