PHP自定义递归函数实现数组转JSON功能【支持GBK编码】


Posted in PHP onJuly 17, 2018

本文实例讲述了PHP自定义递归函数实现数组转JSON功能。分享给大家供大家参考,具体如下:

问题:

由于最近的一个项目中要给别的公司提供接口,给他们喂 GBK 编码的 json 数据,但是有一个问题是 PHP 中的 json_encode 加密函数只支持 utf-8 编码,这就比较尴尬了。我们的数据是 GBK 编码的,接收方要求的数据格式也是 GBK 编码的,一开始想的是先将数据转为 utf-8 编码再使用 json_encode 函数,结果是这导致我们的中文内容乱码了,所以,最后使用的是手动对数据加密的方式。

实现:

想实现这个功能,最主要是观察 json 数据的特点,一开始 LZ 总结得不到位导致不能完全实现 json_encode 函数的功能,后面参照网上的资料,实现了这个功能(就是一个递归函数):

function newArrayToJson($array)
{
  if(!is_array($array))
  {
    return '';
  }
  $func = __FUNCTION__;
  //关键判断是不是关联数组,以此来决定是否需要json加密key和使用[]
  $associative = (array_keys($array) !== range(0, count($array) - 1)) ? true : false;
  if($associative && !empty($array))
  {
    $construct = array();
    foreach($array as $key => $value)
    {
      $key = '"'.$key.'"';
      if(is_array($value))
      {
        $value = $func($value);
      }
      elseif(!is_numeric($value))
      {
        $value = '"'.$value.'"';
      }
      $construct[] = "$key:$value";
    }
    $result = "{".implode(",",$construct)."}";
  }
  else
  {
    $construct = array();
    foreach($array as $value)
    {
      if(is_array($value))
      {
        $value = $func($value);
      }
      else if(!is_numeric($value))
      {
        $value = '"'.$value.'"';
      }
      $construct[] = $value;
    }
    $result = "[".implode(",", $construct)."]";
  }
  return $result;
}
//测试:
$arr=array('1'=>'3water.com','2'=>'www.baidu.com','3'=>'www.sina.com.cn','4'=>'三水点靠木');
echo newArrayToJson($arr);
/*
运行结果:
{"1":"3water.com","2":"www.baidu.com","3":"www.sina.com.cn","4":"三水点靠木"}
*/
PHP 相关文章推荐
PHP详细彻底学习Smarty
Mar 27 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 PHP
PHP插入排序实现代码
Apr 04 PHP
php抽奖小程序的实现代码
Jun 18 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
Jun 28 PHP
php中stdClass的用法分析
Feb 27 PHP
php基本函数汇总
Jul 09 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
PHP闭包函数详解
Feb 13 PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 PHP
PHP filesize函数用法浅析
Feb 15 PHP
php实现分页功能的详细实例方法
Sep 29 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
Jul 17 #PHP
阿里云的WindowsServer2016上部署php+apache
Jul 17 #PHP
tp5实现微信小程序多图片上传到服务器功能
Jul 16 #PHP
PHP 爬取网页的主要方法
Jul 13 #PHP
php实现微信发红包功能
Jul 13 #PHP
Yii2框架redis基本应用示例
Jul 13 #PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 #PHP
You might like
20个PHP常用类库小结
2011/09/11 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
Python查询IP地址归属完整代码
2017/06/21 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
python装饰器使用实例详解
2019/12/14 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
python绘制汉诺塔
2021/03/01 Python
浅谈react路由传参的几种方式
2021/03/23 Javascript
物流专业毕业生推荐信范文
2013/11/18 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
公司员工手册范本
2015/05/14 职场文书
毕业班工作总结
2015/08/10 职场文书
高一地理教学工作总结
2015/08/12 职场文书
导游词之扬州大明寺
2019/10/09 职场文书