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 相关文章推荐
一个高ai的分页函数和一个url函数
Oct 09 PHP
PHP5 字符串处理函数大全
Mar 23 PHP
基于PHP一些十分严重的缺陷详解
Jun 03 PHP
is_uploaded_file函数引发的不能上传文件问题
Oct 29 PHP
生成随机字符串和验证码的类的PHP实例
Dec 24 PHP
PHP连接MYSQL数据库实例代码
Jan 20 PHP
PHP session会话操作技巧小结
Sep 27 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
Jun 16 PHP
详解Yii2.0使用AR联表查询实例
Jun 16 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 PHP
PDO::inTransaction讲解
Jan 28 PHP
laravel 实现设置时区的简单方法
Oct 10 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自动给文章加关键词链接的函数代码
2012/11/29 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
PHPThumb图片处理实例
2014/05/03 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
PHP pear安装配置教程
2016/05/14 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
PHP时间类完整代码实例
2021/02/26 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
28个常用JavaScript方法集锦
2015/01/14 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
js实现电灯开关效果
2021/01/19 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
Python基于requests库爬取网站信息
2020/03/02 Python
Python request使用方法及问题总结
2020/04/26 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
雅诗兰黛加拿大官网:Estee Lauder加拿大
2019/07/31 全球购物
汽车专业人才自我鉴定范文
2013/12/29 职场文书
学校春季防火方案
2014/06/08 职场文书
文明城市标语
2014/06/16 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
千手观音观后感
2015/06/03 职场文书
远程教育培训心得体会
2016/01/09 职场文书
Redis分布式锁的7种实现
2022/04/01 Redis