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中使用XML
Oct 09 PHP
第七节--类的静态成员
Nov 16 PHP
mysql5的sql文件导入到mysql4的方法
Oct 19 PHP
php 无限级 SelectTree 类
May 19 PHP
php中判断文件存在是用file_exists还是is_file的整理
Sep 12 PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 PHP
php二分查找二种实现示例
Mar 12 PHP
PHP不用递归实现无限分级的例子分享
Apr 18 PHP
Thinkphp中Create方法深入探究
Jun 16 PHP
php中Socket创建与监听实现方法
Jan 05 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
Mar 06 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
php返回字符串中所有单词的方法
2015/03/09 PHP
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
python中遍历文件的3个方法
2014/09/02 Python
利用python实现数据分析
2017/01/11 Python
利用aardio给python编写图形界面
2017/08/21 Python
Python数据分析matplotlib设置多个子图的间距方法
2018/08/03 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
C/C++有关内存的思考题
2015/12/04 面试题
大学生个人自荐信
2014/02/24 职场文书
出纳员岗位职责
2014/03/13 职场文书
父母寄语大全
2014/04/12 职场文书
省文明单位申报材料
2014/05/08 职场文书
企业文化标语口号
2014/06/09 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
停电通知范文
2015/04/16 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL