上午在做一個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://xswdd.cn';
$arr = obj_to_arr($obj);
var_dump($arr);
?>

輸出結果:

array(2) {
  ["Name"]=>
  string(18) "飛鳥慕魚博客"
  ["Host"]=>
  string(24) "http://xswdd.cn"
}

補充說明:

国产视频appis_object():用于檢測變量是否是一個對象。

国产视频appis_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;
}
?>