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 相关文章推荐
adodb与adodb_lite之比较
Dec 31 PHP
在PHP中读取和写入WORD文档的代码
Apr 09 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
解析PHP中的正则表达式以及模式匹配
Jun 19 PHP
php制作中间带自己定义图片二维码的方法
Jan 27 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
php操纵mysqli数据库的实现方法
Sep 18 PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 06 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
Oct 16 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 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
phpinfo 系统查看参数函数代码
2009/06/05 PHP
php自定义函数之递归删除文件及目录
2010/08/08 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
PHP新手入门学习方法
2011/05/08 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
$()JS小技巧
2007/07/21 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
JS中数据结构之栈
2019/01/01 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
Python之eval()函数危险性浅析
2014/07/03 Python
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
Django 静态文件配置过程详解
2019/07/23 Python
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
架构师岗位职责
2013/11/18 职场文书
计算机专业毕业生推荐信
2013/11/25 职场文书
家佳咖啡店创业计划书
2013/12/27 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
项目合作协议书范本
2014/04/16 职场文书
机电一体化毕业生自荐信
2014/06/19 职场文书
庆六一宣传标语
2014/10/08 职场文书
明星邀请函
2015/02/02 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
元旦主持词开场白
2015/05/29 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书