首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 陣列與物件互轉遞歸實現:三種方法對比

     編輯:PHP 相關知識

PHP 陣列與物件互轉遞歸實現:三種方法對比

在處理 API 回傳、配置檔、ORM 實體時,陣列與物件互轉是高頻需求。本文整理三種遞歸實現,涵蓋多維巢狀結構、資源型別防護、效能差異。

方法一:陣列轉物件(強制轉型 + 遞歸)

<?php
function arrayToObject($e) {
    if(gettype($e) != 'array') return;
    foreach($e as $k => $v) {
        if(gettype($v) == 'array' || gettype($v) == 'object') {
            $e[$k] = (object)arrayToObject($v);
        }
    }
    return (object)$e;
}
?>

方法二:物件轉陣列(強制轉型 + 遞歸)

<?php
function objectToArray($e) {
    $e = (array)$e;
    foreach($e as $k => $v) {
        if(gettype($v) == 'resource') return; // 防護資源型別
        if(gettype($v) == 'object' || gettype($v) == 'array') {
            $e[$k] = (array)objectToArray($v);
        }
    }
    return $e;
}
?>

方法三:更健壯的物件轉陣列(推薦)

<?php
function object_to_array($e) {
    $_arr = is_object($e) ? get_object_vars($e) : $e;
    foreach($_arr as $key => $val) {
        $val = (is_array($val) || is_object($val)) ? object_to_array($val) : $val;
        $arr[$key] = $val;
    }
    return $arr;
}
?>

三種方法對比

方法優點缺點適用場景
arrayToObject邏輯直觀未處理非陣列輸入、資源型別純陣列轉物件
objectToArray處理 resource 型別防護強制 (array) 轉型可能包含不可見屬性一般物件轉陣列
object_to_array使用 get_object_vars 只取可見屬性,支援陣列直接傳入略繁瑣通用性最強,推薦生產環境

注意事項

  • 私有/受保護屬性:get_object_vars() 僅返回當前作用域可見屬性,若在類外呼叫無法取得 private 屬性。
  • 循環引用:以上實現未檢測循環引用,會導致無限遞歸,生產環境需加入 spl_object_id() 追蹤已處理物件。
  • 效能:大型資料結構建議改用迭代而非遞歸,避免堆疊溢位。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved