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 相关文章推荐
centos 5.6 升级php到5.3的方法
May 14 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
php中设置index.php文件为只读的方法
Feb 06 PHP
分割GBK中文遭遇乱码的解决方法
Aug 09 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
PHP获取文件的MD5值并判断是否被修改的例子
Jun 19 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
thinkphp实现图片上传功能
Jan 13 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
Apr 04 PHP
PHP HTTP 认证实例详解
Nov 03 PHP
php实现用户登陆简单实例
Apr 04 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+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
如何用php获取程序执行的时间
2013/06/09 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
YII使用url组件美化管理的方法
2015/12/28 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
vue 组件高级用法实例详解
2018/04/11 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
python算法表示概念扫盲教程
2017/04/13 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
工业自动化毕业生自荐信范文
2014/01/04 职场文书
优秀毕业生自我鉴定
2014/01/19 职场文书
调解协议书
2014/04/16 职场文书
房地产推广策划方案
2014/05/19 职场文书
学校读书活动总结
2014/06/30 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
社区安全温馨提示语
2015/07/14 职场文书
环保建议书作文300字
2015/09/14 职场文书
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL