Heim  >  Artikel  >  Backend-Entwicklung  >  PHP 对象、数组间的变换

PHP 对象、数组间的变换

WBOY
WBOYOriginal
2016-06-13 13:07:57877Durchsuche

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
)
**/
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn