服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - PHP教程 - PHP自定义递归函数实现数组转JSON功能【支持GBK编码】

PHP自定义递归函数实现数组转JSON功能【支持GBK编码】

2019-09-19 12:55LSGOZJ PHP教程

这篇文章主要介绍了PHP自定义递归函数实现数组转JSON功能,针对json_encode函数处理GBK编码中文出现乱码的情况,使用自定义函数进行数组递归遍历实现可兼容GBK编码的数组转json功能,需要的朋友可以参考下

本文实例讲述了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'=>'www.zzvips.com','2'=>'www.baidu.com','3'=>'www.sina.com.cn','4'=>'服务器之家');
echo newArrayToJson($arr);
/*
运行结果:
{"1":"www.zzvips.com","2":"www.baidu.com","3":"www.sina.com.cn","4":"服务器之家"}
*/

希望本文所述对大家PHP程序设计有所帮助。

延伸 · 阅读

精彩推荐
  • PHP教程ThinkPHP 3使用OSS的方法

    ThinkPHP 3使用OSS的方法

    这篇文章主要介绍了ThinkPHP 3使用OSS的方法,非常不错,具有一定的参考借鉴借鉴,需要的朋友可以参考下 ...

    鸣镝4442019-09-18
  • PHP教程Laravel 队列使用的实现

    Laravel 队列使用的实现

    这篇文章主要介绍了Laravel 队列使用的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    bbdlg2132019-07-07
  • PHP教程php 中htmlentities导致中文无法查询问题

    php 中htmlentities导致中文无法查询问题

    php htmlentities用于接受一个字符串并将该字符串转换为对应的HTML实体,这篇文章主要介绍了php htmlentities导致中文无法查询问题,,需要的朋友可以参考下...

    清茶咖啡2772019-09-07
  • PHP教程PHP通过GD库实现验证码功能示例

    PHP通过GD库实现验证码功能示例

    这篇文章主要介绍了PHP通过GD库实现验证码功能,结合实例形式分析了php验证码相关图片绘制、输出操作实现技巧,需要的朋友可以参考下...

    不能吃的坚果4362019-06-10
  • PHP教程php实现二叉树中和为某一值的路径方法

    php实现二叉树中和为某一值的路径方法

    在本篇文章中我们给大家分享了php实现二叉树中和为某一值的路径方法,有需要的朋友们可以参考下。...

    laozhang4582019-09-01
  • PHP教程实例讲解PHP中使用命名空间

    实例讲解PHP中使用命名空间

    在本篇文章里我们通过实例给大家分享了关于PHP中使用命名空间的相关知识点内容,有兴趣的朋友们学习下。...

    laozhang2452019-06-27
  • PHP教程PHP simplexml_import_dom()函数讲解

    PHP simplexml_import_dom()函数讲解

    今天小编就为大家分享一篇关于PHP simplexml_import_dom()函数讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册1992019-06-22
  • PHP教程PHP获取对象属性的三种方法实例分析

    PHP获取对象属性的三种方法实例分析

    这篇文章主要介绍了PHP获取对象属性的三种方法,结合实例形式分析了php面向对象程序设计中获取对象属性的常见操作技巧,需要的朋友可以参考下...

    chunyuan3144972019-07-08