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 array_intersect()函数使用代码
Jan 14 PHP
利用curl抓取远程页面内容的示例代码
Jul 23 PHP
PHP滚动日志的代码实现
Jun 10 PHP
浅谈PHP中JSON数据操作
Jul 01 PHP
详解php的socket通信
Aug 11 PHP
PHP数组函数知识汇总
May 12 PHP
ThinkPHP使用Ueditor的方法详解
May 20 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
Feb 18 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 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/01/27 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
jquery 批量上传图片实现代码
2010/01/28 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
js获取json中key所对应的value值的简单方法
2020/06/17 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
使用Python写CUDA程序的方法
2017/03/27 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
python如何生成各种随机分布图
2018/08/27 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
探讨HTML5移动开发的几大特性(必看)
2015/12/30 HTML / CSS
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
上课看小说检讨书
2014/02/22 职场文书
公司寄语大全
2014/04/10 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
高三励志标语
2014/06/05 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
李白故里导游词
2015/02/12 职场文书
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
Python编程源码报错解决方法总结经验分享
2021/10/05 Python
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang