最近用到一些简单的对象与数组的相互转换的问题,写个两个方法如下,需要的朋友可以参考下。
代码如下:- function arrayToObject($e){
- if( gettype($e)!='array' ) return;
- foreach($e as $k=>$v){
- if( gettype($v)=='array' || getType($v)=='object' )
- $e[$k]=(object)arrayToObject($v);
- }
- return (object)$e;
- }
- function objectToArray($e){
- $e=(array)$e;
- foreach($e as $k=>$v){
- if( gettype($v)=='resource' ) return;
- if( gettype($v)=='object' || gettype($v)=='array' )
- $e[$k]=(array)objectToArray($v);
- }
- return $e;
- }
复制代码 上面的内容来自 cnblogs jaiho
php多层数组和对象的转换
多层数组和对象转化的用途很简单,便于处理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 "\n";
- print_r($array);
- echo "\n";
- print_r($object);
- ?>
复制代码 |