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 相关文章推荐
一个查看session内容的函数
Oct 09 PHP
PHP 高手之路(二)
Oct 09 PHP
fleaphp常用方法分页之Pager使用方法
Apr 23 PHP
vs中通过剪切板循环来循环粘贴不同内容
Apr 30 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
Jun 24 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
PHP遍历目录文件的常用方法小结
Feb 03 PHP
php 如何设置一个严格控制过期时间的session
May 05 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
php提供实现反射的方法和实例代码
Sep 17 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 批量生成html,txt文件的实现代码
2013/06/26 PHP
php实现图片添加水印功能
2014/02/13 PHP
PHP类的封装与继承详解
2015/09/29 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
jQuery 工具函数学习资料
2010/04/29 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
JS延时器提示框的应用实例代码解析
2016/04/27 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
layui实现数据表格隐藏列的示例
2019/10/25 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
JS校验与最终登陆界面功能完整示例
2020/01/13 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
pygame实现非图片按钮效果
2019/10/29 Python
Django choices下拉列表绑定实例
2020/03/13 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
蜜蜂引路教学反思
2014/02/04 职场文书
教师党员一句话承诺
2014/03/28 职场文书
幼师求职自荐信
2015/03/26 职场文书
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫