php实现的返回数据格式化类实例

本文实例讲述了php实现的返回数据格式化类及其用法,在字符串处理中非常具有实用价值。分享给大家供大家参考。具体方法如下:

DataReturn.class.php类文件如下:

<?php
/** 返回数据格式化类
*  Date:  2011-08-15
*  Author: fdipzone
*/ 

class DataReturn{  // class start 

  private $type;
  private $xmlroot;
  private $callback;
  private $returnData; 

  public function __construct($param=array()){
    $this->type = $this->exists($param,'type')? strtoupper($param['type']) : 'JSON';   // 类型 JSON,XML,CALLBACK,ARRAY
    $this->xmlroot = $this->exists($param,'xmlroot')? $param['xmlroot'] : 'xmlroot';   // xml root dom name
    $this->callback = $this->exists($param,'callback')? $param['callback'] : '';     // JS callback function name 

    $format = array();
    $format['retcode'] = $this->exists($param,'format.retcode')? $param['format']['retcode'] : 'retcode';//retcode 对应名称
    $format['msg'] = $this->exists($param,'format.msg')? $param['format']['msg'] : 'msg';        //msg 对应名称
    $format['data'] = $this->exists($param,'format.data')? $param['format']['data'] : 'data';      //data 对应名称 

    $result = array();
    $result[$format['retcode']] = $this->exists($param,'retcode')? $param['retcode'] : 0;
    $result[$format['msg']] = $this->exists($param,'msg')? $param['msg'] : '';
    $result[$format['data']] = $this->exists($param,'data')? $param['data'] : ''; 

    $this->returnData = $result;
  } 

  //输出数据
  public function data_return(){
    ob_clean();
    switch($this->type){
      case 'JSON':
        $this->json_return();
        break;
      case 'XML':
        $this->xml_return();
        break;
      case 'CALLBACK':
        $this->callback_return();
        break;
      case 'ARRAY':
        $this->array_return();
        break;
      default:
        $this->json_return();
    }
    exit();
  } 

  //输出JSON格式数据,如有callback参数则返回JSONP格式
  private function json_return(){
    header('content-type:text/html;charset=utf-8');
    if(empty($this->callback)){
      echo json_encode($this->returnData);
    }else{
      echo $this->callback.'('.json_encode($this->returnData).');';
    }
  } 

  //输出XML格式数据
  private function xml_return(){
    header('content-type:text/xml;charset=utf-8');
    echo $this->xml_encode($this->returnData,$this->xmlroot);
  } 

  //输出JSON格式数据,并调用callback方法
  private function callback_return(){
    header('content-type:text/html;charset=utf-8');
    $this->callback = empty($this->callback)? 'callback' : $this->callback;
    echo "<script type=\"text/javascript\">\r\n";
    echo $this->callback."(".json_encode($this->returnData).");\r\n";
    echo "</script>";
  } 

  //输出数组格式数据
  private function array_return(){
    header('content-type:text/html;charset=utf-8');
    echo '<pre>';
    print_r($this->returnData);
    echo '</pre>';
  } 

  //XML编码
  private function xml_encode($data, $root='xmlroot', $encoding='utf-8') {
    $xml = "<?xml version=\"1.0\" encoding=\"" . $encoding . "\"?>\n";
    $xml.= "<" . $root . ">\n";
    $xml.= $this->data_to_xml($data);
    $xml.= "</" . $root . ">";
    return $xml;
  } 

  //数组转XML格式
  private function data_to_xml($data) {
    if (is_object($data)) {
      $data = get_object_vars($data);
    }
    $xml = '';
    foreach ($data as $key => $val) {
      is_numeric($key) && $key = "item id=\"$key\"";
      $xml.="<$key>";
      $xml.= ( is_array($val) || is_object($val)) ? $this->data_to_xml($val) : $this->cdata($val);
      list($key, ) = explode(' ', $key);
      $xml.="</$key>\n";
    }
    return $xml;
  } 

  //判断数据是否存在
  private function exists($obj,$key=''){
    if($key==''){
      return isset($obj) && !empty($obj);
    }else{
      $keys = explode('.',$key);
      for($i=0,$max=count($keys); $i<$max; $i++){
        if(isset($obj[$keys[$i]])){
          $obj = $obj[$keys[$i]];
        }else{
          return false;
        }
      }
      return isset($obj) && !empty($obj);
    }
  } 

  //判断是否需要加上<![CDATA[]]>标记
  private function cdata($val){
    if(!empty($val) && !preg_match('/^[A-Za-z0-9+$]/',$val)){
      $val = '<![CDATA['.$val.']]>';
    }
    return $val;
  }
}  // class end
?>

demo示例程序如下:

<?php
  require_once('DataReturn.class.php');
  $param = array( // DataReturn 参数
          'type'  => 'JSON', // 输出的类型 JSON,XML,CALLBACK,ARRAY 默认为 JSON
          'retcode' => '1000', // retcode 的值,默认为0
          'msg'   => '',   // msg 的值,默认为空
          'data'  => array( // 要输出的数据
                  'id'   => '100',
                  'name'  => 'fdipzone',
                  'gender' => 1,
                  'age'  => 28
                 ),
          'format' => array( // 输出的数据key格式,默认为 retcode,msg,data
                  'retcode' => 'status',
                  'msg'   => 'info',
                  'data'  => 'result'
                 ),
          'xmlroot' => 'xmlroot', // 当type=XML时,XML根节点名称,默认为xmlroot
          'callback' => 'callback' /* 回调方法名称
                          type=JSON时,默认为空,如不为空,则输出callback({data});
                          type=CALLBACK时,默认为callback,自动调用页面JS回调方法
                       */
  );
  $obj = new DataReturn($param); // 创建DataReturn类对象
  $obj->data_return();      // 按格式输出数据
?>

希望本文所述对大家php程序设计的学习有所帮助。

(0)

相关推荐

  • PHP实现格式化文件数据大小显示的方法

    本文实例讲述了PHP实现格式化文件数据大小显示的方法.分享给大家供大家参考.具体分析如下: 有时候我们需要在网页上显示某个文件的大小,或者是其它数据的大小数字. 这个数字往往从跨度很大,如果以B为单位的话可能是个位,如果1G则长达1073741824的数字,这个时候我们就需要根据大小来格式化,比如小于1K则以B为单位显示,小于1M则以KB为单位显示,小于1G则以MB为单位显示,以此类推... 格式化函数参考如下: 复制代码 代码如下: //格式化size显示 function formatSiz

  • php格式化金额函数分享

    最近的项目在处理资金这一块的功能,对人民币金额的格式化输出是必不可少的功能.这个功能比较独立而且还比较大众化,所以封装成了函数就发上去也算是方便大家. 复制代码 代码如下: /**  * 格式化金额  *  * @param int $money  * @param int $len  * @param string $sign  * @return string  */ function format_money($money, $len=2, $sign='¥'){     $negativ

  • php使用NumberFormatter格式化货币的方法

    本文实例讲述了php使用NumberFormatter格式化货币的方法.分享给大家供大家参考.具体实现方法如下: $amount = '12345.67'; $formatter = new NumberFormatter('en_GB', NumberFormatter::CURRENCY); echo 'UK: ' . $formatter->formatCurrency($amount, 'EUR') . PHP_EOL; $formatter = new NumberFormatter(

  • PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法

    本文实例讲述了PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法.分享给大家供大家参考.具体分析如下: 语法如下: string gmdate (string $Format) string gmdate (string $Format, int $Time) 演示代码 <?php echo "When this page was loaded,\n"; echo 'It was then ', gmdate ('r'), "\n"; ec

  • PHP日期函数date格式化UNIX时间的方法

    本文实例讲述了PHP日期函数date格式化UNIX时间的方法.分享给大家供大家参考.具体分析如下: 日期函数可以根据指定的格式将一个unix时间格式化成想要的文本输出 使用到函数语法如下 string date (string $Format); string date (string $Format, int $Time); 下面是演示代码 <?php echo "When this page was loaded,\n"; echo 'It was then ', date

  • PHP中常用的字符串格式化函数总结

    字符串的格式化就是将字符串处理为某种特定的格式.通常用户从表单中提交给服务器的数据都是字符串的形式,为了达到期望的输出效果,就需要按照一定的格式处理这些字符串后再去使用.经常见到的字符串格式化函数如下图所示: 注意:在PHP中提供的字符串函数处理的字符串,大部分都不是在原字符串上修改,而是返回一个格式化后的新字符串. 一.取出空格和字符串填补函数 空格也是一个有效的字符,在字符串中也会占据一个位置.用户在表单输入数据时,经常在无意中会多输入一些无意义的空格.因此PHP脚本在接收到通过表单处理过来

  • php格式化日期实例分析

    本文实例讲述了php格式化日期的方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: function ShowDate($flag=0, $timestr=NULL)  {      // 获取周几      $warr = array(      "0" => 星期日,      "1" => 星期一,      "2" => 星期二,      "3" => 星期三,     

  • php使用wordwrap格式化文本段落的方法

    本文实例讲述了php使用wordwrap格式化文本段落的方法.分享给大家供大家参考.具体分析如下: wordwrap()函数可以按照指定的固定行长度格式化文本段落,让段落看起来更加整齐 <?php $string = "TRADING ON MARGIN POSES ADDITIONAL RISKS AND IS NOT SUITABLE FOR ALL INVESTORS. A COMPLETE LIST OF THE RISKS ASSOCIATED WITH MARGIN TRADI

  • php实现的返回数据格式化类实例

    本文实例讲述了php实现的返回数据格式化类及其用法,在字符串处理中非常具有实用价值.分享给大家供大家参考.具体方法如下: DataReturn.class.php类文件如下: <?php /** 返回数据格式化类 * Date: 2011-08-15 * Author: fdipzone */ class DataReturn{ // class start private $type; private $xmlroot; private $callback; private $returnDa

  • 对Layer弹窗使用及返回数据接收的实例详解

    Layer做为弹窗,主页面代码: 注意1. callback()方法 返回字符串,再data:JSON.parse(res)转为ajax提交时的json参数 注意2. textarea 上使用append方法没有效果,改写: var str = $("#area").val() + "\n"+d; $("#area").val(str); //引入js 必须要有(1.8以上版本) jquery <script src="__PUB

  • Vue中请求本地JSON文件并返回数据的方法实例

    目录 1.目录结构 2.检查一下自己是否安装了 json-server(以下截图代表安装了) 3.安装完成以后我们就可以运行自己的json文件了 4.看看浏览器里的数据呈现效果吧 5.为了保险起见,我还特地去 postman 上测试了一下(可以省略这步) 6.现在我们可以编写代码发送请求来获取数据啦 7.在控制台就可以看到我们数据请求回来了 总结 1.目录结构 直接在根目录下创建自己的JSON文件,在此我的JSON文件名为data.json 以下是我的JSON文件内容(此处是参照的黑马程序员的v

  • Springmvc数据格式化原理及代码案例

    1.简介 Converter可以将一种类型转换成另一种类型,是任意Object之间的类型转换. Formatter则只能进String与任意Object对象的转换,它提供解析与格式化两种功能 解析:将String类型字符串转换为任意Objec对象, 格式化:将任意Objec对象转换为字符串进行格式化显示. 使用Formatter 实现Formatter接口定义一个类,T为要解析得到或进行格式化的数据类型. 在类中实现两个方法 String print(T t,Locale locale):把T类

  • Ruby类实例变量、类实例方法和类变量、类方法的区别

    在Ruby中类实例变量.类实例方法和类变量.类方法的区别比较微妙,而且用法也有相当的区别.本文探讨一下他们的定义和基本的使用场景,以抛砖引玉...   一.类实例变量和类变量   类变量大家都很熟悉了,就是在类定义中用@@开头的变量.类变量是用于存储类的全局信息,它只属于类,不同与类实例变量(即用@开头定义的变量)每一个类的对象都有一份数据. 类变量是可以被继承的,也就是说如果我们派生一个子类,那么在子类中是可以访问父类的类变量的.子类和父类共享一份数据,对一个类的修改会反映到另一个类中.如下边

  • C#实现操作MySql数据层类MysqlHelper实例

    本文实例讲述了C#实现操作MySql数据层类MysqlHelper.分享给大家供大家参考.具体如下: using System; using System.Data; using System.Configuration; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; using MySql.Data; using MySql.Data.MySqlCli

  • ajax数据返回进行遍历的实例讲解

    后台返回的数据: {"receiveList":[{"receive_dept_id":"1007873","receive_dept_desc":"区公司领导","guid":"2016112316042622494230","receive_platform_id":"001"},{"receive_dept_id

  • Vue请求java服务端并返回数据代码实例

    这篇文章主要介绍了Vue请求java服务端并返回数据代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 最近在自学vue怎么与java进行数据交互.其实axios还是挺简单的,与ajax请求几乎一样,无外乎也就是要解决下跨域的问题. 废话不多说了,直接贴代码,一看就懂! //向springmvc Controller发起请求,传递一个参数 get请求(带参数传递) axios.get('http://127.0.0.1:8088/inas/

  • jQuery处理xml格式的返回数据(实例解析)

    在这个示例程序中,我将使用$.ajax()方法,使用$.get()方法也可以,但我觉得$.ajax()更好一些,代码更容易懂,并且也不怎么复杂. 复制代码 代码如下: //定义用户名校验的方法function verify(){    //首先测试一下页面的按钮按下,可以调用这个方法    //使用javascript的alert方法,显示一个探出提示框    //alert("按钮被点击了!!!");    //1.获取文本框中的内容    //document.getElement

  • HttpUtils 发送http请求工具类(实例讲解)

    废话不多说,直接上代码 import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFac

随机推荐