上午在做一个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;
}
?>