PHP 对象、数组间的转换
- // 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
- )
- **/

浙公网安备 33010602011771号