php多层数组与对象的转换实例代码

 更新时间:2013年08月05日 08:51:12   作者:  
通过json_decode(json_encode($object)可以将对象一次性转换为数组,但是object中遇到非utf-8编码的非ascii字符则会出现问题,比如gbk的中文,何况json_encode和decode的性能也值得疑虑

多层数组和对象转化的用途很简单,便于处理WebService中多层数组和对象的转化

简单的(array)和(object)只能处理单层的数据,对于多层的数组和对象转换则无能为力。

通过json_decode(json_encode($object)可以将对象一次性转换为数组,但是object中遇到非utf-8编码的非ascii字符则会出现问题,比如gbk的中文,何况json_encode和decode的性能也值得疑虑。

下面上代码:

复制代码 代码如下:

<?php
 function objectToArray($d) {
  if (is_object($d)) {
   // Gets the properties of the given object
   // with get_object_vars function
   $d = get_object_vars($d);
  }

  if (is_array($d)) {
   /*
   * Return array converted to object
   * Using __FUNCTION__ (Magic constant)
   * for recursive call
   */
   return array_map(__FUNCTION__, $d);
  }
  else {
   // Return array
   return $d;
  }
 }

 function arrayToObject($d) {
  if (is_array($d)) {
   /*
   * Return array converted to object
   * Using __FUNCTION__ (Magic constant)
   * for recursive call
   */
   return (object) array_map(__FUNCTION__, $d);
  }
  else {
   // Return object
   return $d;
  }
 }
 // Useage:
 // Create new stdClass Object  
        $init = new stdClass;
 // Add some test data
 $init->foo = "Test data";
 $init->bar = new stdClass;
 $init->bar->baaz = "Testing";
 $init->bar->fooz = new stdClass;
 $init->bar->fooz->baz = "Testing again";
 $init->foox = "Just test";

 // Convert array to object and then object back to array
 $array = objectToArray($init);
 $object = arrayToObject($array);

 // Print objects and array
 print_r($init);
 echo "\n";
 print_r($array);
 echo "\n";
 print_r($object);
?>

相关文章

  • php生成百度sitemap站点地图类函数实例

    php生成百度sitemap站点地图类函数实例

    这篇文章主要介绍了php生成百度sitemap站点地图类函数的方法,详细讲述了百度站点sitemap的实现方法与注意事项,在web站点的建设中非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • PHP中ob_start函数的使用说明

    PHP中ob_start函数的使用说明

    本文是对PHP中ob_start函数的使用方法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • PHP中is_file不能替代file_exists的理由

    PHP中is_file不能替代file_exists的理由

    首先要提出的问题是,is_file真的可以替代file_exists使用吗?答案是否定的。为什么?原因很简单,is_file有缓存
    2014-03-03
  • PHP中预定义的6种接口介绍

    PHP中预定义的6种接口介绍

    这篇文章主要介绍了PHP中预定义的6种接口介绍,本文讲解了Traversable、Iterator、IteratorAggregate、ArrayAccess、Serializable、Closure,需要的朋友可以参考下
    2015-05-05
  • PHP单文件上传原理及上传函数的封装操作示例

    PHP单文件上传原理及上传函数的封装操作示例

    这篇文章主要介绍了PHP单文件上传原理及上传函数的封装操作,结合实例形式详细分析了php文件上传的原理、步骤及相关函数封装操作技巧,需要的朋友可以参考下
    2019-09-09
  • 使用PHPExcel操作Excel用法实例分析

    使用PHPExcel操作Excel用法实例分析

    这篇文章主要介绍了使用PHPExcel操作Excel用法,实例分析了使用PHPExcel进行读写及生成等常用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • php生成图片缩略图的方法

    php生成图片缩略图的方法

    这篇文章主要介绍了php生成图片缩略图的方法,涉及php操作图片的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • PHP读取xml方法介绍

    PHP读取xml方法介绍

    在php开发中,我们经常会越到读取xml文件的情况,这里简单总结下一些方法,方便需要的朋友
    2013-01-01
  • PHP缓存集成库phpFastCache用法

    PHP缓存集成库phpFastCache用法

    这篇文章主要介绍了PHP缓存集成库phpFastCache用法,包括基本用法的分析与操作实例,在PHP项目开发中非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • php数组函数序列之sort() 对数组的元素值进行升序排序

    php数组函数序列之sort() 对数组的元素值进行升序排序

    sort() 函数按升序对给定数组的值排序。注释:本函数为数组中的单元赋予新的键名。原有的键名将被删除
    2011-11-11

最新评论