PHP 对象和数组互相转换

最简单的:$array = (array)$object;

但是, 如果对象的属性也是个对象的话, 就转换不了了, 就是说PHP的强制类型转换不能把对象属性中的对象转换成数组的下一个维度的数组, 刚刚找了手册说hw_objrec2array这个函数可以, 但是我用了提示 undefined, 然后就自己写了个如下:

function ob2ar($obj) {
    if(is_object($obj)) {
        $obj = (array)$obj;
        $obj = ob2ar($obj);
    } elseif(is_array($obj)) {
        foreach($obj as $key => $value) {
            $obj[$key] = ob2ar($value);
        }
    }
    return $obj;
}

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);
?> 
时间: 2024-11-09 21:51:15

PHP 对象和数组互相转换的相关文章

php如何遍历多维的stdClass Object 对象,php的转换成数组的函数只能转换外面一丛数组

php如何遍历多维的stdClass Object 对象,php的转换成数组的函数只能转换外面一丛数组 (2012-09-10 19:58:49) 标签: 杂谈 分类: 网页基础知识 function objtoarr($obj){$ret = array();foreach($obj as $key =>$value){if(gettype($value) == 'array' || gettype($value) == 'object'){$ret[$key] = objtoarr($val

PHP数组与对象之间用递归转换

一些简单的对象与数组的相互转换的问题,采用递归写了两个方法如下 ? 1 2 3 4 5 6 7 8  function arrayToObject($e){          if( gettype($e)!='array' ) return;      foreach($e as $k=>$v){          if( gettype($v)=='array' || getType($v)=='object' )                 $e[$k]=(object)arrayTo

jQuery中serializeArray方法的使用及对象与字符串的转换

使用jQuery中的serializeArray()方法可以方便的将表单中的各个信息,转化为多个{name:xx,value:xx}对象的数组, 再使用遍历的方式可以方便的将数组转化为json对象, 代码如下 <p id="results"><b>Results: </b> </p> <form> <select name="single"> <option>Single</o

通过JSON.stringfy()和JSON.parse(),实现对象或者数组深拷贝

JavaScript中对象或者数组等引用类型,直接拷贝,改变一个另外一个也会改变: 下列代码在浏览器控制台执行: var arr = [1,2,3]; var arr1 = arr; arr1.push(4); console.log(arr); //[1,2,3,4] console.log(arr1);//[1,2,3,4] 通过JSON.stringfy()和JSON.parse()转换 var arr = [1,2,3]; var arr1 = JSON.stringify(arr);

JQuery对象与DOM对象的区别与转换

1.jQuery对象和DOM对象的区别 DOM对象,即是我们用传统的方法(javascript)获得的对象,jQuery对象即是用jQuery类库的选择器获得的对象; eg: var domObj = document.getElementById("id"); //DOM对象var $obj = $("#id"); //jQuery对象; jQuery对象就是通过jQuery包装DOM对象后产生的对象,它是jQuery独有的.如果一个对象是jQuery对象,那么就

含有对象的数组的复制(拷贝)或者clone

在jquery里,可以通过$extend(dst,src1,src2)来实现对象的合并和复制来生成一个新的对象 但是都是针对{}类型的对象 很多情况下,我们需要对[{},{},{}]类型的对象数组进行复制 一个简单的方法是,先将要复制的对象数组转换成json,然后利用eval变成对象 如下 var src = [{name:'dv'},{sex:'male'},{others:[{a:'a',b:'b'}]}]; //利用JSON.stringify 字符串对象数组 var jsonstr = 

惊叹jQuery(解决jQuery对象到DOM的转换)

jQuery是一个javascript框架,但绝对不是通常意义上的一些包装,个人感觉是一个改变js控制方式的框架.我们可以像美工通过写css分离页面代码一样,通过jQuery来分离页面与效果..下面转一段介绍: jQuery具有如下一些特点: 1.            代码简练.语义易懂.学习快速.文档丰富. 2.            jQuery是一个轻量级的脚本,其代码非常小巧,最新版的JavaScript包只有20K左右. 3.            jQuery支持CSS1-CSS3

js 基础知识 对象与数组

对象是一种无序属性的集合,每个属性都有自己的名字和值. 对象的创建有很多种,我在第一章已经说过了. 如何遍历一个对象: var x;var txt="";var person={fname:"Bill",lname:"Gates",age:56}; for (x in person)       //x其实是一个变量,代表的是person对象的属性{txt=txt + person[x];              //person[属性]  等

js实现对象或者数组深拷贝

今天遇到个问题,就是vue绑定的数组在push中所有的数组都会跟着改变.这个主要是因为 JavaScript中对象或者数组等引用类型,直接拷贝,改变一个另外一个也会改变: 有个简单的方法就是先转换为字符串再转换为json var arr = [1,2,3]; var arr1 = arr; arr1.push(4); console.log(arr); //[1,2,3,4] console.log(arr1);//[1,2,3,4] 上面这是没转换的. 1.通过JSON.stringfy()和