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中使用Oracle数据库(1)
Oct 09 PHP
php cli换行示例
Apr 22 PHP
php实现无限级分类
Dec 24 PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 PHP
四个PHP非常实用的功能
Sep 29 PHP
Yii实现显示静态页的方法
Apr 25 PHP
PHP正则表达式入门教程(推荐)
May 18 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
Oct 22 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP递归算法的简单实例
Feb 28 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伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
Django+Vue跨域环境配置详解
2018/07/06 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
解决removeEventListener 无法清除监听的问题
2020/10/30 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
python虚拟环境迁移方法
2019/01/03 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
护士演讲稿优秀范文
2014/04/30 职场文书
根叔历年演讲稿
2014/05/20 职场文书
文艺演出策划方案
2014/06/07 职场文书
政协委员个人总结
2015/03/03 职场文书
社区国庆节活动总结
2015/03/23 职场文书
大队委员竞选稿
2015/11/20 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python