>백엔드 개발 >PHP 튜토리얼 > PHP 对象、数组间的变换

PHP 对象、数组间的变换

WBOY
WBOY원래의
2016-06-13 13:07:57934검색

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
(
    [a] => 1
    [b] => 2
    [c] => 3
)
Array
(
    [a] => 1
    [b] => 2
    [c] => 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
(
    [foo] => Test data
    [bar] => stdClass Object
        (
            [baaz] => Testing
            [fooz] => stdClass Object
                (
                    [baz] => Testing again
                )
        )
    [foox] => Just test
)
Array
(
    [foo] => Test data
    [bar] => Array
        (
            [baaz] => Testing
            [fooz] => Array
                (
                    [baz] => Testing again
                )
        )
    [foox] => Just test
)
stdClass Object
(
    [foo] => Test data
    [bar] => stdClass Object
        (
            [baaz] => Testing
            [fooz] => stdClass Object
                (
                    [baz] => Testing again
                )
        )
    [foox] => Just test
)
**/
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.