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 相关文章推荐
从网上搜到的phpwind 0day的代码
Dec 07 PHP
php分页思路以及在ZF中的使用
May 30 PHP
PHP实现变色验证码实例
Jan 06 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
PHP文件读写操作相关函数总结
Nov 18 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
thinkPHP3.1验证码的简单实现方法
Apr 22 PHP
php pdo操作数据库示例
Mar 10 PHP
PHP使用Nginx实现反向代理
Sep 20 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 PHP
Yii框架学习笔记之应用组件操作示例
Nov 13 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
php中文字符截取防乱码
2008/03/28 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
js中this用法实例详解
2015/05/05 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
js密码强度检测
2016/01/07 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
Nodejs多站点切换Htpps协议详解及简单实例
2017/02/23 NodeJs
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
Python Queue模块详解
2014/11/30 Python
基于python实现百度翻译功能
2019/05/09 Python
django创建简单的页面响应实例教程
2019/09/06 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
使用css3绘制出各种几何图形
2016/08/17 HTML / CSS
电子专业推荐信范文
2013/11/18 职场文书
人力资源管理专业学生自我评价
2013/11/20 职场文书
公司董事长职责
2013/12/12 职场文书
给老婆的搞笑检讨书
2014/01/12 职场文书
员工生日会策划方案
2014/06/14 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
五好家庭申报材料
2014/12/20 职场文书
2016教师节感恩话语
2015/12/09 职场文书
Oracle笔记
2021/04/05 Oracle
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
Pillow图像处理库安装及使用
2022/04/12 Python