PHP에서 객체 배열을 다룰 때 각 객체가 가진 특정 속성값만 추출해야 하는 경우가 자주 발생합니다. 예를 들어 아래와 같이 stdClass 객체들로 이루어진 배열에서 각 객체의 id 값만 뽑아내야 한다면 어떻게 해야 할까요?
예제 코드
$my_object = Array
( [0] => stdClass Object
(
[id] => 12
),
[1] => stdClass Object
(
[id] => 33
),
[2] => stdClass Object
(
[id] => 59
)
)위 배열에서 [12, 33, 59]라는 id 목록만 추출하는 것이 목표입니다. PHP 버전에 따라 두 가지 방법을 사용할 수 있습니다.
방법 1: array_map 함수 (구버전 PHP)
PHP 5.5 미만의 구버전에서는 array_map 함수를 활용할 수 있습니다. 익명 함수를 생성하여 각 객체에서 id 속성을 반환하는 방식입니다.
$object_id = array_map(create_function('$o', 'return $o->id;'), $objects);참고로 create_function()은 PHP 7.2부터 사용이 권장되지 않고(deprecated) PHP 8.0에서 완전히 제거되었으므로, 최신 환경에서는 아래의 array_column 방식을 사용하는 것이 좋습니다.
방법 2: array_column 함수 (PHP 5.5 이상)
PHP 5.5 이상 버전에서는 훨씬 간결하고 직관적인 array_column 함수를 사용할 수 있습니다. 이 함수는 다차원 배열이나 객체 배열에서 원하는 컬럼(속성)의 값만 모아 새로운 배열로 반환합니다.
$object_id = array_column($my_object, 'id');
실행 결과
두 방법 모두 아래와 같은 결과를 출력합니다.
[12, 33, 59]
정리
- 구버전(PHP 5.5 미만):
array_map과 콜백 함수를 조합하여 속성을 추출합니다. - 최신 버전(PHP 5.5 이상):
array_column한 줄로 간단하게 처리하며, 성능과 가독성 면에서도 우수합니다.
가능하다면 array_column을 사용하는 것이 코드 유지보수와 성능 측면에서 가장 좋은 선택입니다.