首页 > 移动平台 > 详细

夺命雷公狗---PHP开发APP接口---3(XML方式封装接口数据方法)

时间:2015-11-11 07:44:06      阅读:226      评论:0      收藏:0      [点我收藏+]

封装方法

xmlEncode($code,$message=‘‘,$data=array())

data数据分析

1...array(‘index‘ => ‘api‘);

<?php
    /**
    *按xml的形式输出通信接口
    *param integer $code验证码
    *param string $message提示信息
    *param array $data数据
    *return    string
    */
    class Ren{
        public static function xmlEcode($code,$message=‘‘,$data=array()){
            if(!is_numeric($code)){
                return ‘‘;
            }
            
            $result = array(
                ‘code‘ => $code,
                ‘message‘ => $message,
                ‘data‘ => $data
            );
            header("Content-Type:text/xml");
            $xml = "<?xml version=‘1.0‘ encoding=‘UTF-8‘?>\n";
            $xml .= "<root>\n";
            $xml .= self::xmltoEncode($result);
            $xml .= "</root>";
            echo $xml;
        }
        
        public static function xmltoEncode($data){
            $xml = ‘‘;
            foreach($data as $k=>$v){
                $xml .= "<{$k}>";//$k相当于数据里面的节点
                $xml .= is_array($v) ? self::xmltoEncode($v):$v;//$v相当xml节点里面的数据//为了方法里面还是数组所以加上了一个递归调用让他继续调用foreach
                $xml .= "</{$k}>\n";
            }
            return $xml;
        
        }
    }
    $data = array(
        ‘id‘ => 1,
        ‘name‘ => ‘lisi‘,
    );
    Ren::xmlEcode(200,‘success‘,$data);

 

 

 

2...array(1,7,89)

如果我传进来的数组是这样的,他就会报错,

    $data = array(
        ‘id‘ => 1,
        ‘name‘ => ‘lisi‘,
        ‘type‘ => array(1,7,89)
    );

她会认为数组里面的下标也是节点,但是xml里面有一个原则,数字不能为节点。

我们可以这样来解决问题所在,

原本是这种形式,<0>1<0>
可改造成这种形式的<item id="0">1</item>

代码如下:

<?php
    /**
    *按xml的形式输出通信接口
    *param integer $code验证码
    *param string $message提示信息
    *param array $data数据
    *return    string
    */
    class Ren{
        public static function xmlEcode($code,$message=‘‘,$data=array()){
            if(!is_numeric($code)){
                return ‘‘;
            }
            
            $result = array(
                ‘code‘ => $code,
                ‘message‘ => $message,
                ‘data‘ => $data
            );
            header("Content-Type:text/xml");
            $xml = "<?xml version=‘1.0‘ encoding=‘UTF-8‘?>\n";
            $xml .= "<root>\n";
            $xml .= self::xmltoEncode($result);
            $xml .= "</root>";
            echo $xml;
        }
        
        public static function xmltoEncode($data){
            $xml = $attr = ‘‘;
            foreach($data as $k=>$v){
                if(is_numeric($k)){
                    $attr = " id=‘{$k}‘";
                    $k =‘item‘;
                }
                $xml .= "<{$k}{$attr}>";//$k相当于数据里面的节点
                $xml .= is_array($v) ? self::xmltoEncode($v):$v;//$v相当xml节点里面的数据
                $xml .= "</{$k}>\n";
            }
            return $xml;
        }
    }
    $data = array(
        ‘id‘ => 1,
        ‘name‘ => ‘lisi‘,
        ‘type‘ => array(1,7,89,array(‘5‘,‘a‘,‘d‘,‘d‘))
    );
    Ren::xmlEcode(200,‘success‘,$data);

 

这样就可以实现了所谓的大小通杀的效果了

夺命雷公狗---PHP开发APP接口---3(XML方式封装接口数据方法)

原文:http://www.cnblogs.com/leigood/p/4955126.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!