PHP以json或xml格式返回请求数据的方法


Posted in PHP onMay 31, 2018

无论是网页还是移动端,都需要向服务器请求数据,那么作为php服务端,如何返回标准的数据呢?

现在主流的数据格式无非就是json和xml,下面我们来看看如何用php来封装一个返回这两种格式数据的类

我们先定义一个响应类

class response{
}

1、以json格式返回数据

json格式返回数据比较简单,直接将我们后台获取到的数据,以标准json格式返回给请求端即可

//按json格式返回数据
public static function json($code,$message,$data=array()){
 if(!is_numeric($code)){
  return '';
 }
 $result=array(
  "code"=>$code,
  "message"=>$message,
  "data"=>$data
 );
 echo json_encode($result);
}

2、以xml格式返回数据

这种方式需要遍历data里面的数据,如果数据里有数组还要递归遍历。还有一种特殊情况,当数组的下标为数字时,xml格式会报错,需要将xml中数字标签替换

//按xml格式返回数据
 public static function xmlEncode($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'?>";
  $xml.="<root>";
  $xml.=self::xmlToEncode($result);
  $xml.="</root>";
  echo $xml;
 }
 public static function xmlToEncode($data){
  $xml=$attr='';
  foreach($data as $key=>$value){
   if(is_numeric($key)){
    $attr="id='{$key}'";
    $key="item";
   }
   $xml.="<{$key} {$attr}>";
   $xml.=is_array($value)?self::xmlToEncode($value):$value;
   $xml.="</{$key}>";
  }
  return $xml;
 }
}

3、将两种格式封装为一个方法,完整代码如下:

class response{
 public static function show($code,$message,$data=array(),$type='json'){
  /**
  *按综合方式输出通信数据
  *@param integer $code 状态码
  *@param string $message 提示信息
  *@param array $data 数据
  *@param string $type 数据类型
  *return string
  */
  if(!is_numeric($code)){
   return '';
  }
  $result=array(
   "code"=>$code,
   "message"=>$message,
   "data"=>$data
  );
  if($type=='json'){
   self::json($code,$message,$data);
   exit;
  }elseif($type=='xml'){
   self::xmlEncode($code,$message,$data);
   exit;
  }else{
   //后续添加其他格式的数据
  }
 }
 //按json格式返回数据
 public static function json($code,$message,$data=array()){
  if(!is_numeric($code)){
   return '';
  }
  $result=array(
   "code"=>$code,
   "message"=>$message,
   "data"=>$data
  );
  echo json_encode($result);
 }
 //按xml格式返回数据
 public static function xmlEncode($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'?>";
  $xml.="<root>";
  $xml.=self::xmlToEncode($result);
  $xml.="</root>";
  echo $xml;
 }
 public static function xmlToEncode($data){
  $xml=$attr='';
  foreach($data as $key=>$value){
   if(is_numeric($key)){
    $attr="id='{$key}'";
    $key="item";
   }
   $xml.="<{$key} {$attr}>";
   $xml.=is_array($value)?self::xmlToEncode($value):$value;
   $xml.="</{$key}>";
  }
  return $xml;
 }
}
$data=array(1,231,123465,array(9,8,'pan'));
response::show(200,'success',$data,'json');

这样我们调用show方法时,需要传递四个参数,第四个参数为想要返回的数据格式,默认为json格式,效果如下:

PHP以json或xml格式返回请求数据的方法

我们再调用一次show方法,以xml格式返回数据:

response::show(200,'success',$data,'xml');

效果如下:

PHP以json或xml格式返回请求数据的方法

这样我们就完成了对这两种数据格式的封装,可以随意返回这两种格式的数据了

以上这篇PHP以json或xml格式返回请求数据的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
Linux下ZendOptimizer的安装与配置方法
Apr 12 PHP
php 禁止页面缓存输出
Jan 07 PHP
PHP中对缓冲区的控制实现代码
Sep 29 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
Nov 11 PHP
分享10段PHP常用代码
Nov 11 PHP
php实现的xml操作类
Jan 15 PHP
基于PHP实现商品成交时发送短信功能
May 11 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 PHP
Laravel5.1自定义500错误页面示例
Oct 09 PHP
php实现查询功能(数据访问)
May 23 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
May 30 #PHP
php支付宝系列之电脑网站支付
May 30 #PHP
Laravel框架使用Redis的方法详解
May 30 #PHP
php实现微信支付之退款功能
May 30 #PHP
分享5个非常有用的Laravel Blade指令
May 30 #PHP
php实现微信支付之企业付款
May 30 #PHP
ThinkPHP5框架缓存查询操作分析
May 30 #PHP
You might like
PHP 常见郁闷问题答解
2006/11/25 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
js过滤数组重复元素的方法
2010/09/05 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
2014/12/10 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
用Python编写web API的教程
2015/04/30 Python
Python单体模式的几种常见实现方法详解
2017/07/28 Python
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
Django 内置权限扩展案例详解
2019/03/04 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
应届中专生自荐书范文
2014/02/13 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
会员卡清退活动总结
2014/08/27 职场文书
研究生导师推荐信
2014/09/06 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python