上午在做一个php项目时,遇到了一个对象与数组之间相互转换的问题,就随手写了两个关于对象转数组,数组转对象的自定义函数,记录一下,分享有需要的童鞋。
php 数组转对象的函数
函数代码:<?php
function arr_to_obj($arr){
$obj = null;
if (is_array($arr)) {
$obj = new StdClass();
foreach ($arr as $key => $a){
$obj->$key = $a;
}
}
if (is_object($arr)){
$obj = $arr;
}
return $obj;
}
?>
函数调用方法:<?php
//这是一个数组
$arr = array('name' => '小明','sex' => 16);
$obj = arr_to_obj($arr);
echo $obj->name;
// 输出结果: 小明
?>
注:
stdClass类是一个没有成员变量也没有成员方法的类,它所有的魔术方法,父类、接口等在初始化时都被设置成NULL。由于在PHP中对于一个类我们无法动态的添加方法, 所以这个类只能用来处理动态属性,这也是我们一种常见的用法。
php 对象转数组的函数
函数代码:<?php
function obj_to_arr($obj){
$array = array();
if (is_object($obj)){
foreach ($obj as $key => $a) {
$array[$key] = $a;
}
}
if(is_array($obj)){
$array = $obj;
}
return $array;
}
?>
函数调用:<?php
//创建一个类,并添加对象
$obj = new StdClass();
$obj->Name = '飞鸟慕鱼博客';
$obj->Host = 'http://www.feiniaomy.com';
$arr = obj_to_arr($obj);
var_dump($arr);
?>
输出结果:array(2) {
["Name"]=>
string(18) "飞鸟慕鱼博客"
["Host"]=>
string(24) "http://www.feiniaomy.com"
}
补充说明:
is_object():用于检测变量是否是一个对象。
is_array():用于检测变量是否是一个数组
系统函数数组与对象的互转
1、对象转数组<?php
$obj = new StdClass();
$obj->Name = '小红';
$obj->Sex = '16';
//这里开始转换
// json_encode() 函数的第二个参数true
$arr = json_decode(json_encode($obj),true);
var_dump($arr);
?>
打印结果:array(2) {
["Name"]=>
string(6) "小红"
["Sex"]=>
string(2) "16"
}
2、数组转对象<?php
$arr = array('id'=>1,'name'=>'aaa');
// json_encode() 函数的第二个参数未设置,默认为 false
$obj = json_decode(json_encode($arr));
var_dump($obj);
?>
打印结果:object(stdClass)#3 (2) {
["id"]=>
int(1)
["name"]=>
string(3) "aaa"
}
php 数组与对象互转的其它方法<?php
/**
* 数组 TO 对象
* 飞鸟慕鱼博客
* @param array $arr 数组
* @return object
*/
function arrayToObject($arr) {
if (gettype($arr) != 'array') {
return;
}
foreach ($arr as $k => $v) {
if (gettype($v) == 'array' || getType($v) == 'object') {
$arr[$k] = (object)arrayToObject($v);
}
}
return (object)$arr;
}
/**
* 对象 TO 数组
* 飞鸟慕鱼博客
* @param object $obj 对象
* @return array
*/
function objectToArray($obj) {
$obj = (array)$obj;
foreach ($obj as $k => $v) {
if (gettype($v) == 'resource') {
return;
}
if (gettype($v) == 'object' || gettype($v) == 'array') {
$obj[$k] = (array)objectToArray($v);
}
}
return $obj;
}
?>