정의 및 사용 방법
- PHP 버전
- 5.5+
array_column() 함수는
주어진 다차원 배열에서 특정 컬럼 키(key)에 해당하는 값들을 모아 새로운 인덱스 배열로 반환합니다.
다차원 배열에서 "컬럼 키(key)"란 구조가 같은 하위 배열에서 동일하게 식별할 수 있는 키들이 마치 컬럼처럼 보인다고 해서 사용되는 용어입니다.
아래 그림은 다차원 배열에서 "컬럼 키(key)"가 무엇인지 보여줍니다.
이는 데이터 처리 작업에서 배열을 표 형식으로 시각화하는 일반적인 관행을 반영한 용어입니다.
특징
array_column()함수는 키와 값이 있는 구조가 같은 하위 배열을 가진 다차원 배열에서 유용하게 사용됩니다.- 단일한 특정 컬럼 키(key)의 값들로 구성된 새로운 인덱스 배열을 반환하며, 원본 배열은 그대로 유지됩니다.
반환된 인덱스 배열로 데이터를 원본인 다차원 배열보다 가볍고 편리하게 다루기 위해 주로 활용됩니다.
기본 예제
$users = [
['id' => 101, 'name' => 'Alice', 'city' => 'Seoul'],
['id' => 102, 'name' => 'Brian', 'city' => 'Busan'],
['id' => 103, 'name' => 'Clara', 'city' => 'Seoul']
];
$names = array_column($users, 'name');
print_r($names);
아래의 출력 결과는 다차원 배열인 $users에서 'name' 키의 컬럼 값들만 추출하여 순서대로 새로운 인덱스 배열로 반환된 것을 보여줍니다.
원본 배열 $users는 그대로 유지됩니다.
print_r()로 출력된 결과: 인덱스 배열로 반환
Array
(
[0] => Alice
[1] => Brian
[2] => Clara
)
구문
array_column(array $array, int|string|null $column_key, int|string|null $index_key = null): array
매개변수
$array |
값을 추출해낼 다차원 배열 또는 객체들의 배열입니다.
|
|---|---|
$column_key |
추출하고 싶은 컬럼(열)의 키를 지정합니다.
|
$index_key |
옵션.
반환되는 배열에서 키로 사용할 컬럼을 지정합니다.
|
반환 값
주어진 다차원 배열(또는 객체들의 배열)에서 지정된 단일 컬럼을 나타내는 값을 반환합니다.
변경 이력
| 버전 | 설명 |
|---|---|
| 8.0.0 | $index_key로 지정된 컬럼에 객체(Object)가 포함되어 있을 경우, 더 이상 그 객체를 문자열로 강제 변환하여 키로 사용하지 않습니다. 대신, TypeError가 발생합니다. |
객체들의 배열에서 array_column() 함수 사용
array_column() 함수는 다차원 배열뿐만 아니라 객체들의 배열에서도 사용할 수 있습니다. public 속성을 컬럼 키로 지정하여 값을 추출할 수 있습니다. 아래 예제는 User객체로 구성된 배열에서 public 속성인 username속성만 뽑아 새로운 인덱스 배열로 반환하는 방법을 보여줍니다.
class User {
public $username;
public function __construct(string $username)
{
$this->username = $username;
}
}
// 객체 배열 생성
$users = [
new User('user 1'),
new User('user 2'),
new User('user 3')
];
// 객체 배열에서 'username' 속성만 추출
$usernames = array_column($users, 'username');
print_r($usernames);
Array
(
[0] => user 1
[1] => user 2
[2] => user 3
)
protected나 private 속성까지 가져오기
array_column() 함수는 기본적으로 public 속성만 추출할 수 있습니다.
하지만 클래스에 __get()과 __isset() 메서드를 구현하면, protected나 private 속성도 컬럼 값으로 추출할 수 있습니다.
class Person {
private $name;
public function __construct(string $name)
{
$this->name = $name;
}
public function __get($prop)
{
return $this->$prop;
}
public function __isset($prop) : bool
{
return isset($this->$prop);
}
}
$people = [
new Person('Fred'),
new Person('Jane'),
new Person('John')
];
// private 속성도 __get()과 __isset() 메서드로 추출 가능
$names = array_column($people, 'name');
print_r($names);
Array
(
[0] => Fred
[1] => Jane
[2] => John
)
$index_key로 반환되는 인덱스 배열에 키 부여하기
array_column() 함수는 기본적으로 인덱스 배열을 반환하지만, 옵션인 $index_key 매개변수를 사용하면 키를 부여할 수 있습니다. 이 기능을 활용하면, 필요에 따라, 특정 키로 배열 요소를 빠르게 조회하거나 조건 확인을 더 효율적으로 수행할 수 있습니다.
아래 예제에서는 $users 배열에서 'name' 컬럼을 값으로, 'id' 컬럼을 키로 지정하여 반환 배열을 생성합니다.
$users = [
['id' => 101, 'name' => 'Alice', 'city' => 'Seoul'],
['id' => 102, 'name' => 'Brian', 'city' => 'Busan'],
['id' => 103, 'name' => 'Clara', 'city' => 'Seoul']
];
// id 컬럼을 키로, name 컬럼을 값으로 추출
$userNamesById = array_column($users, 'name', 'id');
print_r($userNamesById);
Array
(
[101] => Alice
[102] => Brian
[103] => Clara
)
활용 예제
array_column() 함수로 추출한 인덱스 배열을 활용하면, 원본 다차원 배열을 반복하거나 조건 확인할 때 더 가볍고 편리하게 데이터를 처리할 수 있습니다.
아래 예제는 다차원 배열인 $users에서 이름만 추출한 인덱스 배열로 특정 이름을 확인하고, 이를 기반으로 다른 작업을 수행하는 예입니다.
$users = [
['id' => 101, 'name' => 'Alice', 'city' => 'Seoul'],
['id' => 102, 'name' => 'Brian', 'city' => 'Busan'],
['id' => 103, 'name' => 'Clara', 'city' => 'Seoul']
];
// 이름 컬럼만 추출
$names = array_column($users, 'name');
// 이름 배열에서 특정 이름이 있는지 확인
if (in_array('Brian', $names)) {
echo "Brian은 사용자 목록에 있습니다.";
}
// 이름 배열을 활용해 반복 처리
foreach ($names as $name) {
echo "- $name\n";
}
코드 부연설명
in_array() 함수는 배열에서 특정 값이 있는지 확인합니다.
확인하려는 값이 배열의 요소로 존재하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
코드 부연설명
foreach() 반복문은 배열이나 객체를 순회해서 반복으로 처리할 때 사용하는 대표적인 구문입니다.
Brian은 사용자 목록에 있습니다.
- Alice
- Brian
- Clara