php对象转换成数组的实例(兼容多维数组)

发布时间:2020-12-16编辑:脚本学堂
本文介绍下,在php中将对象换成数组的一个例子,可以兼容多维数组,有需要的朋友参考下吧。

例子:

<?php
/** 
 * @author gayayang
 * @date 2013/6/23
 * @todo 将对象转换成数组
 * @param unknown_type $obj
 * @return unknown
 * @edit www.jb200.com
 */
function object_to_array($obj){  
    $_arr = is_object($obj) ? get_object_vars($obj) :$obj;
    foreach ($_arr as $key=>$val){
        $val = (is_array($val) || is_object($val)) ? $this->object_to_array($val):$val;
        $arr[$key] = $val;
    }
    return $arr;
}  
?>

php简单对象与数组的转换函数:

<?php
/**
* 简单对象与数组的转换
* edit www.jb200.com
*/
function arrayToObject($e){ 
if( gettype($e)!='array' ) return; 
foreach($e as $k=>$v){ 
if( gettype($v)=='array' || getType($v)=='object' ) 
$e[$k]=(object)arrayToObject($v); 
} 
return (object)$e; 
} 

function objectToArray($e){ 
$e=(array)$e; 
foreach($e as $k=>$v){ 
if( gettype($v)=='resource' ) return; 
if( gettype($v)=='object' || gettype($v)=='array' ) 
$e[$k]=(array)objectToArray($v); 
} 
return $e; 
} 
?>

php多层数组和对象的转换:
多层数组和对象转化的用途很简单,便于处理WebService中多层数组和对象的转化。
简单的(array)和(object)只能处理单层的数据,对于多层的数组和对象转换则无能为力。
通过json_decode(json_encode($object)可以将对象一次性转换为数组,但是object中遇到非utf-8编码的非ascii字符则会出现问题,比如gbk的中文,何况json_encode和decode的性能也值得考虑。

实例代码如下:

<?php 
/**
* 多层数组和对象的转换
* edit www.jb200.com
*/
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); 
?>