xuol001 发表于 2018-12-15 06:15:18

PHP 对象、数组间的转换

/**  
* PHP 对象、数组间的转换
  
*
  
* @author flyer0126
  
* @since 2012/05/03
  
**/
  

  
// 1. 利用(array)和(object),简单处理
  
$objTemp = (object)array();
  
$objTemp->a = 1;
  
$objTemp->b = 2;
  
$objTemp->c = 3;
  
$arrTemp = (array)$objTemp;
  
print_r($objTemp);
  
print_r($arrTemp);
  

  
/**
  
stdClass Object
  
(
  
    => 1
  
    => 2
  
    => 3
  
)
  
Array
  
(
  
    => 1
  
    => 2
  
    => 3
  
)
  
**/
  

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

  
// 2. 多维数组与对象间的转换处理
  

  
/**
  
* 将对象转换为多维数组
  
*
  
**/
  
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:
  
$init = new stdClass;
  
$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);
  
print_r($array);
  
print_r($object);
  

  
/**
  
stdClass Object
  
(
  
    => Test data
  
    => stdClass Object
  
      (
  
             => Testing
  
             => stdClass Object
  
                (
  
                   => Testing again
  
                )
  
      )
  
    => Just test
  
)
  
Array
  
(
  
    => Test data
  
    => Array
  
      (
  
             => Testing
  
             => Array
  
                (
  
                   => Testing again
  
                )
  
      )
  
    => Just test
  
)
  
stdClass Object
  
(
  
    => Test data
  
    => stdClass Object
  
      (
  
             => Testing
  
             => stdClass Object
  
                (
  
                   => Testing again
  
                )
  
      )
  
    => Just test
  
)
  
**/


页: [1]
查看完整版本: PHP 对象、数组间的转换