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 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
用PHP和ACCESS写聊天室(一)
Oct 09 PHP
php中取得URL的根域名的代码
Mar 23 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
用php制作简单分页(从数据库读取记录)的方法详解
May 04 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
Jun 28 PHP
php增删改查示例自己写的demo
Sep 04 PHP
析构函数与php的垃圾回收机制详解
Oct 28 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
CI框架中数据库操作函数$this->db->where()相关用法总结
May 17 PHP
php使用Jpgraph创建3D饼形图效果示例
Feb 15 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 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开发入门教程之面向对象
2006/12/05 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
php文件操作相关类实例
2015/06/18 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
php表单处理操作
2017/11/16 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
javascript事件模型代码
2007/07/01 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
深入理解Django的中间件middleware
2018/03/14 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
阿迪达斯越南官网:adidas越南
2020/07/19 全球购物
和平主题的演讲稿
2014/01/12 职场文书
小学作文评语大全
2014/04/21 职场文书
助理政工师申报材料
2014/06/03 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书