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 相关文章推荐
一些常用的php函数
Dec 06 PHP
php结合飞信 免费天气预报短信
May 07 PHP
一个php短网址的生成代码(仿微博短网址)
May 07 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
linux下实现定时执行php脚本
Feb 13 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
Mar 25 PHP
joomla实现注册用户添加新字段的方法
May 05 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 PHP
php之可变变量的实例详解
Sep 12 PHP
PHP自动载入类文件函数__autoload的使用方法
Mar 25 PHP
PHP使用DOM对XML解析处理操作示例
Jul 04 PHP
Jsonp劫持学习
Apr 01 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数组最大值,最小值的代码
2011/10/31 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
JS module的导出和导入的实现代码
2019/02/25 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
Vue项目移动端滚动穿透问题的实现
2020/05/19 Javascript
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
pygame实现简易飞机大战
2018/09/11 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
Python能做什么
2020/06/02 Python
求网格中的黑点分布
2013/11/06 面试题
公司年会演讲稿范文
2014/01/11 职场文书
企业年会主持词
2014/03/27 职场文书
优秀会计求职信
2014/07/04 职场文书
教师网络培训心得体会
2016/01/09 职场文书