php多层数组和对象的转换

网络整理 - 07-26
   

  多层数组和转化的用途很简单,便于处理WebService中多层数组和对象的转化

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

  通过json_decode(json_encode($object)可以将对象一次性转换为数组,但是object中遇到非utf-8编码的非ascii字符则会出现问题,比如gbk的中文,何况json_encode和decode的性能也值得疑虑。

  下面上代码:

<?php 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 arrayreturn $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 objectreturn $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 arrayprint_r($init);echo "\n";print_r($array);echo "\n";print_r($object);?>