前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于ThinkPHP中App(通信)接口开发封装JSON数据 并读取JSON数据的封装

基于ThinkPHP中App(通信)接口开发封装JSON数据 并读取JSON数据的封装

作者头像
沈唁
发布2018-05-24 16:07:57
3.6K0
发布2018-05-24 16:07:57
举报
文章被收录于专栏:沈唁志

PHP 是世界上最好的语言。

在为 App 开发接口过程中,我们必不可少的要为Android和 iOS 工程师们提供返回的数据,如何灵活快速又易懂的返回他们需要的数据是非常关键的。

其实 ThinkPHP 已经把很多我们要用到的都写出来了,我们基本可以使用来返回我们需要的数据。

 通信数据的标准格式:

code 状态码(200,400 等); message 提示信息(登录失败,数据返回成功等); data 返回数据;

函数的封装当然是为了方便我们的使用,使用方法如下:

代码语言:javascript
复制
public function demo() { 
     //查询数据库数据
     $admin = M('admin');
     $data  = $admin->select();
     $json  = $this->api_rule($data,'数据查询成功');
     echo $json;
 }

PHP 开发手机 API 时,一般返回 XML 或 JSON 数据类型的数据,除了要返回从源数据(程序本身需要的数据)外还应附上状态码,以下是一段封装后的数据,它使用 JSON 格式展现:

代码语言:javascript
复制
    /**
     * php 编写 app 接口的函数封装
     * 
     * @param  string  $data    [从数据库中所查出的数据]
     * @param  string  $message [接口的提示信息,解释状态码所使用]
     * @param  integer $code    [状态码]
     * @return [type]           [返回 json 数据类型]
     * 接口主要实现了 value 不为空
     * 并且统一将类型转化成字符串
     * 将安卓与 ios 中的关键字进行 key 的转化,如果是系统关键字,那么我将 key 添加尾缀 _api 进行数组重组
     * 一维数组与二维数组通用
     */
	 public function api_rule($data='',$message='成功',$code=1)
   {
        $all_data=array(
            'code'=>$code,
            'message'=>$message,
            );
        //数组校验(目的是判断数组几维数组)
       
        //判断是否是数组,并且数组是否大于三维数组
        foreach ($data as $x => $y) 
        {
            if(is_array($y))
            {
              foreach ($y as $x1 => $y1) 
              {
                  if(is_array($y1))
                  {
                    echo "函数中不能使用三维以上数组";exit(0);
                  }
              }
            }
        }
        //如果数据不为空的情况下所执行以下代码
        if ($data!=='') {
            // app 禁止使用和为了统一字段做的判断,ios 的字典中不识别的关键字
            $reserved_words=array('id','title','price','product_title','product_id','product_category','product_number');
            foreach ($reserved_words as $k => $v) 
            {
                foreach ($data as $ko => $ko_value) 
                {
                  if(is_array($ko_value))
                  {
                       if (array_key_exists($v, $ko_value)) 
                      {  
                          $keys = $v.""."_api";
                          //取出数组中所有的 key 值
                          $keyss = array_keys($ko_value);
                          $ko_value[$keys]=$ko_value[$v];
                          unset($ko_value[$v]);
                          $data[]=$ko_value;
                          array_splice($data,0,1);
                      }
                     
                  }else{
                      //检测我数组的 key 是否存在于这些关键字当中
                      if (array_key_exists($v, $data)) 
                      {  
                          $keys = $v.""."_api";
                          $data[$keys]=$data[$v];
                          //取出数组中所有的 key 值
                          $keyss = array_keys($data);
                          $index = array_search($v, $keyss);
                          if($index !== FALSE){
                            array_splice($data, $index, 1);
                          }
                      }
                  }
                }
            }

            foreach ($data as $key => $value) 
            {
                if(is_array($value))
                {
                     foreach ($value as $key12 => $value12) 
                    {
                       if(!is_string($value12))
                       {
                           $data[$key][$key12]=strval($value12);   
                       }
                       //如果我的 value 是空的情况下,赋予默认值  空
                       if(empty($value12))
                       {
                           $data[$key][$key12]="空";
                       }
                    }
                }else{
                   if(!is_string($value))
                   {
                       $data[$key]=strval($value);   
                   }
                   //如果我的 value 是空的情况下,赋予默认值  空
                   if(empty($value))
                   {
                       $data[$key]="空";
                   }
                }
                //如果我的 value 不是字符串类型,我强转成字符串类型
            }

             $all_data['data']=$data;
        }

        // 如果是 ajax 或者 app 访问;则返回 json 数据 pc 访问直接 p 出来
        return json_encode($all_data);
        exit(0);
    }

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:基于ThinkPHP中App(通信)接口开发封装JSON数据 并读取JSON数据的封装

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档