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文本操作类
Nov 25 PHP
PHP防注入安全代码
Apr 09 PHP
Fatal error: Call to undefined function curl_init()解决方法
Apr 09 PHP
php 中英文语言转换类
Sep 07 PHP
解析php 版获取重定向后的地址(代码)
Jun 26 PHP
php数据类型判断函数有哪些
Sep 23 PHP
php将csv文件导入到mysql数据库的方法
Dec 24 PHP
推荐10个提供免费PHP脚本下载的网站
Dec 31 PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 PHP
PHP实现验证码校验功能
Nov 16 PHP
Laravel如何自定义command命令浅析
Mar 23 PHP
PHP实现两种排课方式
Jun 26 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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
PHP 强制下载文件代码
2010/10/24 PHP
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
sae使用smarty模板的方法
2013/12/17 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
简单的php购物车代码
2020/06/05 PHP
js loading加载效果实现代码
2009/11/24 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
2019/07/31 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
Pandas 按索引合并数据集的方法
2018/11/15 Python
python3学生名片管理v2.0版
2018/11/29 Python
Python中的集合介绍
2019/01/28 Python
Pytorch 使用不同版本的cuda的方法步骤
2020/04/02 Python
python re模块常见用法例举
2021/03/01 Python
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
销售自我评价
2013/10/22 职场文书
合同专员岗位职责
2013/12/18 职场文书
教师学习培训邀请函
2014/02/04 职场文书
一年级学生期末评语
2014/04/21 职场文书
小学数学课题方案
2014/06/15 职场文书
2015年新农合工作总结
2015/03/30 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
学前班教学反思
2016/02/24 职场文书
导游词之长城八达岭
2019/09/24 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android