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 相关文章推荐
?生?D片??C字串
Dec 06 PHP
利用PHP实现智能文件类型检测的实现代码
Aug 02 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
windows7下安装php的php-ssh2扩展教程
Jul 04 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
基于php数组中的索引数组和关联数组详解
Mar 12 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 PHP
laravel 自定义常量的两种方案
Oct 14 PHP
PHP的Trait机制原理与用法分析
Oct 18 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 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开发者事半功倍的十大技巧小结
2010/04/20 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
JavaScript解析json格式数据简单示例
2014/12/09 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
简述vue中的config配置
2018/01/23 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
python如何通过protobuf实现rpc
2016/03/06 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
python实现五子棋游戏
2019/06/18 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
Java程序员面试题
2016/09/27 面试题
学校元旦晚会方案
2014/02/19 职场文书
联谊活动总结范文
2015/05/09 职场文书
2015年污水处理厂工作总结
2015/05/26 职场文书
怎样写观后感
2015/06/19 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
《文化苦旅》读后感:阅读,让人诗意地栖居在大地上
2019/12/24 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
MySQL 分页查询的优化技巧
2021/05/12 MySQL
python随机打印成绩排名表
2021/06/23 Python
Node实现搜索框进行模糊查询
2021/06/28 Javascript
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android