function object_to_array($data) {
if (is_object($data)) {
$data = (array) $data;
}
if (is_array($data)) {
foreach ($data as $key => $value) {
$data[$key] = object_to_array($value);
}
}
return $data;
}
優點:不依賴編碼,能處理多層巢狀物件。缺點:大量資料時效能較差。
$array = json_decode(json_encode($object), true);
原理:json_encode 將物件序列化為 JSON 字串,json_decode(..., true) 直接解碼為關聯陣列。
⚠️ 限制:資料必須為 UTF-8 編碼;資源型別、循環參考會失敗。
function object2array(&$object) {
$object = json_decode(json_encode($object), true);
return $object;
}
實測 10 萬筆資料,遞迴法需 3 秒,JSON 法僅 0.1 秒。非 UTF-8 資料請先 iconv 轉碼。
| 場景 | 推薦方法 |
|---|---|
| 一般用途、資料量小、編碼不確定 | 方法一 |
| 大量資料、確定 UTF-8、追求速度 | 方法二/三 |
| 含資源型別或循環參考 | 僅能用方法一 |
若只需公開屬性,亦可用 get_object_vars($obj) 直接取得陣列。