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实现链结人气统计
Oct 09 PHP
PHP4.04简明安装
Oct 09 PHP
php 文件上传系统手记
Oct 26 PHP
PHP分页函数代码(简单实用型)
Dec 02 PHP
浅析PHP 按位与或 (^ 、&)
Jun 21 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
php获取数组长度的方法(有实例)
Oct 27 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
YII使用url组件美化管理的方法
Dec 28 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
May 13 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 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原理之Session Gc的一个小概率Notice
2011/04/12 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
PHP实现对图片的反色处理功能【测试可用】
2018/02/01 PHP
js操作二级联动实现代码
2010/07/27 Javascript
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
js运动应用实例解析
2015/12/28 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
python如何安装下载后的模块
2020/07/03 Python
详解Flask前后端分离项目案例
2020/07/24 Python
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
销售人员工作自我评价
2014/09/21 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
党支部培养考察意见
2015/06/02 职场文书
基层党建工作简报
2015/07/21 职场文书
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle
nginx容器方式反向代理实战
2022/04/18 Servers
详解Mysql事务并发(脏读、不可重复读、幻读)
2022/04/29 MySQL