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

  多层数组和对象转化的用途很简单,便于处理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);

  ?>