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版(5)
Oct 09 PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
Aug 07 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 PHP
PHP 最大运行时间 max_execution_time修改方法
Mar 08 PHP
一个严格的PHP Session会话超时时间设置方法
Jun 10 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
PHP编程中尝试程序并发的几种方式总结
Mar 21 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 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
晶体管单管来复再生式收音机
2021/03/02 无线电
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
浅谈PHP封装CURL
2019/03/06 PHP
javascript 函数式编程
2007/08/16 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python递归遍历列表及输出的实现方法
2015/05/19 Python
详解Python之unittest单元测试代码
2018/01/24 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
python Django的web开发实例(入门)
2019/07/31 Python
python实现数字炸弹游戏程序
2020/07/17 Python
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
电脑教师的教学自我评价
2013/11/26 职场文书
顶岗实习计划书
2014/01/10 职场文书
天地会口号
2014/06/17 职场文书
学术会议通知范文
2015/04/15 职场文书
学生会任命书范本
2015/09/21 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
如何使用PyCharm及常用配置详解
2021/06/03 Python
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python