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产生动态的影像图
Oct 09 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
Jun 04 PHP
QQ登录 PHP OAuth示例代码
Jul 20 PHP
YII模块实现绑定二级域名的方法
Jul 09 PHP
如何通过Linux命令行使用和运行PHP脚本
Jul 29 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
Linux平台PHP5.4设置FPM线程数量的方法
Nov 09 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 PHP
php多进程模拟并发事务产生的问题小结
Dec 07 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 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
很实用的一个完整email发送程序
2006/10/09 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
php报错502badgateway解决方法
2019/10/11 PHP
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
JS 控件事件小结
2012/10/31 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
微信小程序 实现点击添加移除class
2017/06/12 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
2018/06/23 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
整理Python中的赋值运算符
2015/05/13 Python
python标记语句块使用方法总结
2019/08/05 Python
python生成器推导式用法简单示例
2019/10/08 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
介绍下Java的输入输出流
2014/01/22 面试题
会计电算化专业个人的自我评价
2013/11/24 职场文书
购房协议书范本
2014/04/11 职场文书
警示教育活动总结
2014/05/05 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
Python函数式编程中itertools模块详解
2021/09/15 Python
使用Ajax实现进度条的绘制
2022/04/07 Javascript