PHP陣列和物件的相互轉換
阿新 • • 發佈:2018-12-24
關於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;
}
}