1. 程式人生 > >PHP陣列和物件的相互轉換

PHP陣列和物件的相互轉換

關於php中想讓物件以陣列的形式訪問,這時候就需要使用到get_object_vars()函數了。先來介紹一下這個函式。

官方文件是這樣解釋的:

array get_object_vars ( object $obj )

返回由 obj 指定的物件中定義的屬性組成的關聯陣列。
舉一個栗子:

<?php
class Point2D {
    var $x, $y;
    var $label;

    function Point2D($x, $y)
    {
        $this->x = $x;
        $this->y = $y
; } function setLabel($label) { $this->label = $label; } function getPoint() { return array("x" => $this->x, "y" => $this->y, "label" => $this->label); } } // "$label" is declared but not defined
$p1 = new Point2D(1.233, 3.445); print_r(get_object_vars($p1)); $p1->setLabel("point #1"); print_r(get_object_vars($p1)); ?>

會輸出:

Array
 (
     [x] => 1.233
     [y] => 3.445
     [label] =>
 )

 Array
 (
     [x] => 1.233
     [y] => 3.445
     [label] => point #1
 )

這樣就很好理解了,這個函式就是物件轉陣列的關鍵函式。

物件轉陣列具體實現

function objectToArray($obj) {
    //首先判斷是否是物件
    $arr = is_object($obj) ? get_object_vars($obj) : $obj;
    if(is_array($arr)) {
        //這裡相當於遞迴了一下,如果子元素還是物件的話繼續向下轉換
        return array_map(__FUNCTION__, $arr);
    }else {
        return $arr;
    }
}

陣列轉物件具體實現

function arrayToObject($arr) {
    if(is_array($arr)) {
        return (object)array_map(__FUNCTION__, $arr);
    }else {
        return $arr;
    }
}