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

PHP 객체 배열에서 특정 속성 추출하기 (array_map vs array_column)

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을 사용하는 것이 코드 유지보수와 성능 측면에서 가장 좋은 선택입니다.