|
多层数组和对象转化的用途很简单,便于处理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 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 '
- ';
- print_r($array);
- echo '
- ';
- print_r($object);
- ?>
复制代码 |
评分
-
查看全部评分
|