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 相关文章推荐
解决MySQL中文输出变成问号的问题
Jun 05 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
Feb 17 PHP
如何用php生成扭曲及旋转的验证码图片
Jun 07 PHP
php之XML转数组函数的详解
Jun 07 PHP
php读取纯真ip数据库使用示例
Jan 26 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
php学习笔记之基础知识
Nov 08 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
Yii2验证器(Validator)用法分析
Jul 23 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 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
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
php读取excel文件的简单实例
2013/08/26 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
解决laravel查询构造器中的别名问题
2019/10/17 PHP
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
js微信支付实现代码
2016/12/22 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
2019/10/12 Python
python 实现让字典的value 成为列表
2019/12/16 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
Python生成器generator原理及用法解析
2020/07/20 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
C++是不是类型安全的
2014/02/18 面试题
优秀管理者获奖感言
2014/02/17 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
售后服务经理岗位职责
2014/02/25 职场文书
家长会主持词开场白
2015/05/29 职场文书
健康证明
2015/06/19 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
聊聊Python String型列表求最值的问题
2022/01/18 Python