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
php中如何使对象可以像数组一样进行foreach循环
Aug 09 PHP
php网站判断用户是否是手机访问的方法
Nov 01 PHP
php类声明和php类使用方法示例分享
Mar 29 PHP
利用谷歌 Translate API制作自己的翻译脚本
Jun 04 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
Zend Framework框架Smarty扩展实现方法
Mar 22 PHP
PHP错误机制知识汇总
Mar 24 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
我的php学习笔记(毕业设计)
2012/02/21 PHP
PHP中文编码小技巧
2014/12/25 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
python随机生成库faker库api实例详解
2019/11/28 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
信号生成及DFT的python实现方式
2020/02/25 Python
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
个人找工作自荐信格式
2013/09/21 职场文书
材料加工工程求职信
2014/02/19 职场文书
学校出纳员岗位职责
2014/03/18 职场文书
市场拓展计划书
2014/05/03 职场文书
高校教师个人总结
2015/02/10 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL