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 5.0对象模型深度探索之属性和方法
Mar 27 PHP
修改Zend引擎实现PHP源码加密的原理及实践
Apr 14 PHP
php setcookie函数的参数说明及其用法
Apr 20 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
Zend Framework教程之模型Model用法简单实例
Mar 04 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
php获取服务器操作系统相关信息的方法
Oct 08 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
Oct 19 PHP
浅析PHP7 的垃圾回收机制
Sep 06 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 include的妙用,实现路径加密
2008/07/29 PHP
php面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
js处理php输出时间戳对不上号的解决方法
2014/06/20 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
JavaScript日期库date-fn.js使用方法解析
2020/09/09 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
python破解同事的压缩包密码
2020/10/14 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
全网最全python库selenium自动化使用详细教程
2021/01/12 Python
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
创意活动策划书
2014/01/15 职场文书
北京奥运会口号
2014/06/21 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
办理房产证委托书
2014/09/18 职场文书
出租车拒载检讨书
2015/01/28 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
Python实现简单的猜单词
2021/06/15 Python
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript