php api响应格式数据格式化Response类

2 篇文章 0 订阅
<?php
/**
 * Created by PhpStorm.
 * User: 江
 * Date: 2018/10/9
 * Time: 11:49
 */

//用于显示响应信息
class Response
{
    /**
     * 格式常量
     */
    const JSON="json";

    /**
     * 根据不同的格式把数据转换成响应的格式输出
     * @param $code 状态码
     * @param $message  提示信息
     * @param array $data   返回的数据
     * @param string $type  返回数据的格式(json.xml,array)
     * @return array|string
     */
    public static function show($code,$message,$data=array(),$type=self::JSON){
        //当传入的返回码不是数字时,return 空
        if(!is_numeric($code)){
            return '';
        }

        //当url后有format格式参数传过来时,使用传过来的参数进行处理
        //没有传值过来就用函数 $type参数决定
        $type=isset($_GET['format'])?$_GET['format']:$type;

        //组装一下数据
        $result=array(
            'code'=>$code,
            'message'=>$message,
            'data'=>$data,
        );

        //根据 $type 进行分发
        if($type=="json"){
           self::jsonToEncode($code,$message,$data);
        }elseif($type=="xml"){
            self::xmlToEncode($code,$message,$data);
        }else{
            //直接返回数组格式
            return $result;
        }
    }

    /**
     * 产生json格式数据
     * @param $code
     * @param $message
     * @param array $data
     */
    public static function jsonToEncode($code,$message,$data=array()){
        $data=[
            'code'=>$code,
            'message'=>$message,
            'data'=>$data
        ];
        echo json_encode($data);
        exit;
    }

    /***
     * 产生xml格式数据
     * @param $code
     * @param $message
     * @param array $data
     */
    public static function xmlToEncode($code,$message,$data=array()){
        $result=[
            'code'=>$code,
            'message'=>$message,
            'data'=>$data
        ];
        header("Content-Type:text/xml");
        $xml="<?xml version='1.0' encoding='UTF-8' ?>";
        $xml.="<root>";
        $xml.=self::xmlEncode($result);
        $xml.="</root>";
        echo $xml;
    }

    /**
     * 把传入的数组数据,格式化成xml格式数据
     * @param $data
     * @return string
     */
    public static function xmlEncode($data){
        $xml=$attr="";
        foreach($data as $key=>$value){
            //当数据为 索引型数组,就把下标以节点属性的形式组装起来 <item id={下标}>{value}</item>
            if(is_numeric($key)){
                $attr="id='{$key}'";
                $key="item";
            }
            $xml.="<{$key} {$attr}>";
            //递归遍历,当$value是数组时就再次调用本函数
            $xml.=is_array($value)?self::xmlEncode($value):$value;
            $xml.="</{$key}>";
        }
        return $xml;
    }
}
$data=[
  'id'=>1,
  'name'=>'ocean',
  'type'=>array(1,2,3=>[4,5,6])
];
Response::show(200,"success",$data,'xml');

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值