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 相关文章推荐
php4的session功能评述(二)
Oct 09 PHP
一个ubbcode的函数,速度很快.
Oct 09 PHP
PHP--用万网的接口实现域名查询功能
Dec 13 PHP
php文件缓存类汇总
Nov 21 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
PHP记录页面停留时间的方法
Mar 30 PHP
php中使用GD库做验证码
Mar 31 PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
Apr 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
php 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
php实现微信公众平台账号自定义菜单类
2015/10/11 PHP
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
jquery选择器使用详解
2014/04/08 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
深入理解js中this的用法
2016/05/28 Javascript
原生JS实现跑马灯效果
2017/02/20 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
在Python中使用next()方法操作文件的教程
2015/05/24 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
Python正则简单实例分析
2017/03/21 Python
深入理解python中的select模块
2017/04/23 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
python散点图实例之随机漫步
2018/08/27 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
python+opencv实现阈值分割
2018/12/26 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
SteelSeries赛睿官网:游戏外设和配件的领先制造商(耳机、键盘、鼠标和鼠标垫)
2018/06/17 全球购物
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
管理心得体会
2013/12/28 职场文书
餐饮业员工工作决心书
2014/03/11 职场文书
企业领导对照检查材料
2014/08/20 职场文书
代收款委托书范本
2014/10/01 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
微信小程序实现聊天室功能
2021/06/14 Javascript
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL