Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 객체를 연관 배열로 변환하는 2가지 방법

PHP에서 객체를 연관 배열로 변환하기

PHP 개발을 하다 보면 객체(object)의 데이터를 연관 배열(associative array) 형태로 다뤄야 할 때가 자주 있습니다. 예를 들어 JSON 데이터를 가공하거나, 배열 전용 내장 함수를 활용하고 싶을 때가 대표적입니다. 이번 글에서는 가장 많이 사용되는 두 가지 변환 방법을 예제 코드와 실행 결과와 함께 살펴보겠습니다.

방법 1: json_encode()와 json_decode() 조합

json_encode()로 객체를 JSON 문자열로 변환한 뒤, json_decode()의 두 번째 인자로 true를 전달하면 결과가 연관 배열로 반환됩니다. 중첩된 객체까지 한 번에 배열로 바꿔준다는 장점이 있습니다.

예제

<?php
    class department {
        public function __construct($deptname, $deptzone) {
            $this->deptname = $deptname;
            $this->deptzone = $deptzone;
        }
    }
    $myObj = new department("Marketing", "South");
    echo "변환 전:"."\n";
    var_dump($myObj);
    $myArray = json_decode(json_encode($myObj), true);
    echo "변환 후:"."\n";
    var_dump($myArray);
?>

실행 결과

위 코드를 실행하면 다음과 같은 출력을 확인할 수 있습니다.

변환 전:
object(department)#1 (2) {
    ["deptname"]=>
    string(9) "Marketing"
    ["deptzone"]=>
    string(5) "South"
}
변환 후:
array(2) {
    ["deptname"]=>
    string(9) "Marketing"
    ["deptzone"]=>
    string(5) "South"
}

방법 2: (array) 타입 캐스팅

더 간단한 방법은 타입 캐스팅(type casting)입니다. 객체 앞에 (array)를 붙여주기만 하면 즉시 배열로 변환됩니다. 별도의 함수 호출 없이 한 줄로 처리할 수 있어 성능 면에서도 유리합니다.

예제

<?php
    class department {
        public function __construct($deptname, $deptzone) {
            $this->deptname = $deptname;
            $this->deptzone = $deptzone;
        }
    }
    $myObj = new department("Marketing", "South");
    echo "변환 전:"."\n";
    var_dump($myObj);
    $arr = (array)$myObj;
    echo "변환 후:"."\n";
    var_dump($arr);
?>

실행 결과

변환 전:
object(department)#1 (2) {
    ["deptname"]=>
    string(9) "Marketing"
    ["deptzone"]=>
    string(5) "South"
}
변환 후:
array(2) {
    ["deptname"]=>
    string(9) "Marketing"
    ["deptzone"]=>
    string(5) "South"
}

두 방법의 차이점과 주의 사항

두 방식 모두 동일한 결과를 출력하지만, 내부적으로 몇 가지 차이가 있으므로 상황에 맞게 선택하는 것이 좋습니다.

1. 접근 제어자 처리(array) 캐스팅은 private, protected 속성도 변환하지만 키 이름 앞에 널 문자(\0)가 포함될 수 있습니다. 반면 json_encode()/json_decode() 방식은 public 속성만 변환하며 나머지는 무시됩니다.

2. 중첩 구조 처리 — JSON 기반 방식은 객체 안에 객체가 있는 경우에도 재귀적으로 모두 배열로 변환해 주지만, 단순 캐스팅은 최상위 속성만 배열로 바꾸고 내부 객체는 그대로 유지됩니다.

3. 성능 — 단순히 최상위 속성만 필요하다면 (array) 캐스팅이 더 빠르고 효율적입니다. JSON 직렬화·역직렬화 과정을 거치지 않기 때문입니다.

정리하면, 일반적인 public 속성 변환에는 간결한 (array) 캐스팅을, 중첩 객체를 깊이 있게 변환해야 한다면 json_decode(json_encode(...), true) 방식을 사용하는 것이 좋습니다.