정의 및 사용 방법
- PHP 버전
- 4.0.6+
array_filter() 함수는
콜백 함수를 사용하여 배열의 요소를 필터링합니다.
이 함수를 사용하면 쉽게 배열의 요소 중 원하는 값만 남기도록 필터링할 수 있습니다.
조건을 콜백 함수로 작성하면, 조건에 만족하는 요소만 새로운 배열로 반환합니다.
특징
- 필터링할 조건은 콜백 함수에서 적용합니다.
- 조건을 만족하면true를, 그렇지 않으면false를 반환하도록 작성해야 합니다. - 원본 배열은 그대로 두고, 조건을 만족하는 요소로만 이루어진 새 배열을 반환합니다.
- 이때, 필터링된 요소는 필터링되기 이전의 배열 키(인덱스)를 유지합니다.
기본 예제
array_filter() 함수를 사용해서 배열의 요소중에서 짝수만 필터링해서 필터링된 배열로 반환하는 예제입니다.
// 필터링할 배열
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// 개발자가 직접 작성한 콜백 함수
function isEven($value) {
return $value % 2 == 0; // 짝수인 경우 true 반환
}
// 필터링된 배열로 반환
$evenNumbers = array_filter($numbers, 'isEven');
print_r($evenNumbers);
/*
출력: 원본 배열의 키(인덱스)를 그대로 유지
Array
(
[1] => 2
[3] => 4
[5] => 6
[7] => 8
[9] => 10
)
*/
구문
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
매개변수
$array |
필수. 필터링할 배열입니다. |
|---|---|
$callback |
옵션. 배열의 각 요소를 처리하는 콜백 함수입니다. 콜백 함수는 배열의 요소를 전달 인자로 받고, 결과로 true 또는 false를 반환합니다. true를 반환하면 해당 요소가 필터링된 배열에 포함되고, false를 반환하면 해당 요소가 필터링된 배열에 포함되지 않습니다. 콜백 함수를 제공하지 않으면 배열의 모든 빈 항목이 제거됩니다. PHP 8.0.0 버전부터는 콜백 함수를 제공하지 않으면 E_WARNING 경고가 발생합니다. |
$mode |
옵션. 조건 함수 호출 시 전달할 플래그로, ARRAY_FILTER_USE_KEY 또는 ARRAY_FILTER_USE_BOTH 상수 중 하나를 사용할 수 있습니다. ARRAY_FILTER_USE_KEY를 사용하면 콜백 함수에는 배열의 키(key)만 전달됩니다. 이는 연관 배열에서 키(key)를 기반으로 필터링 작업을 수행하려는 경우에 유용합니다. ARRAY_FILTER_USE_BOTH를 사용하면 콜백 함수에는 배열의 값(value)과 키(key) 모두 전달됩니다. 이를 통해 값과 키를 모두 활용하여 필터링 작업을 수행할 수 있습니다. 기본값은 0으로, 값(value)만 콜백 함수에 전달됩니다. |
반환 값
필터링된 배열입니다. 이때 필터링된 요소는 필터링되기 이전의 배열 키(인덱스)를 유지합니다.
콜백 함수의 작동 원리
array_filter() 함수는 주어진 배열의 요소를 개발자가 직접 작성한 콜백 함수를 사용하여 원하는 조건에 따라 필터링하고,
조건을 충족하는 요소만으로 이루어진 필터링된 배열로 반환하는 함수입니다.
array_filter() 함수의 콜백 함수는 배열을 필터링하는 데 사용됩니다. 이 콜백 함수는 주어진 배열의 각 요소에 대해 호출되며, 그 결과에 따라 요소가 필터링되거나 필터링되지 않습니다. 다음은 array_filter() 함수의 콜백 함수가 호출되는 과정을 진행 순서대로 설명한 것입니다.
array_filter() 함수에서 사용하는 콜백 함수의 구조
/**
* 콜백 함수
*
* @param mixed $element 배열의 각 요소
* @return bool 필터링 조건을 충족하면 true, 그렇지 않으면 false 반환
*
* 기명 함수(사용자 정의 함수)나 익명 함수 등으로 사용할 수 있습니다.
*/
/* 콜백 함수를 기명 함수를 사용할 경우 */
function callback($element) { // 기명 함수 정의
// 필터링할 로직: 필터링된 결과를 반환해야 합니다.
}
array_filter($array, 'callback'); // 정의한 기명 함수명을 매개변수에 문자열로 직접 전달
/* 콜백 함수를 익명 함수로 사용할 경우 */
array_filter($array, function($element) {
// 필터링할 로직: 필터링된 결과를 반환해야 합니다.
});
array_filter() 함수의 작동 순서입니다.
array_filter()함수를 호출할 때, 첫 번째 매개변수로 필터링할 배열을 전달합니다.- 두 번째 매개변수로 콜백 함수를 전달합니다. 이 콜백 함수는 배열의 각 요소에 대해 호출됩니다.
array_filter()함수는 필터링할 배열의 첫 번째 요소를 선택하고, 이 요소를 콜백 함수의 매개변수($element)로 전달합니다.- 콜백 함수가 호출되고, 전달된 요소는 콜백 함수 내에서 사용할 수 있습니다. 이 콜백 함수 내에서 필요한 조건을 적용하고,
return키워드를 사용하여 해당 요소가 필터링 조건을 충족하는지 여부를 판단합니다. - 콜백 함수가
true를 반환하면, 현재 요소는 필터링된 배열에 포함됩니다.false를 반환하면 현재 요소는 필터링된 배열에 포함되지 않습니다. array_filter()함수는 다음 배열 요소를 선택하고 이와 같은 과정을 반복합니다.- 모든 배열 요소에 대한 콜백 함수 호출이 완료되면,
array_filter()함수는 필터링된 결과를 포함하는 새로운 배열을 반환합니다. - 반환된 배열에는 콜백 함수에서
true를 반환한 요소들만 포함됩니다.
이러한 방식으로 array_filter() 함수의 콜백 함수는 주어진 배열을 필터링하고 필터링된 결과를 반환합니다. 콜백 함수는 개발자가 정의한 조건을 기반으로 필터링을 수행하므로, 다양한 필터링 작업을 수행할 수 있습니다.
주의할 점
원본 배열의 인덱스 유지
array_filter() 함수는 필터링된 결과를 새로운 배열로 반환하면서 원본 배열의 키(인덱스)를 그대로 유지합니다.
따라서, 필터링된 배열의 키(인덱스)는 원본 배열과 동일하게 됩니다.
아래의 예제 코드는 1부터 10까지의 숫자로 구성된 배열을 array_filter() 함수로 짝수만 필터링하는 예제입니다.
array_filter() 함수는 필터링된 결과를 새로운 배열로 반환하면서 원본 배열의 키(인덱스)를 그대로 유지합니다.
// 필터링할 배열
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// 개발자가 직접 작성한 콜백 함수
function isEven($value) {
return $value % 2 == 0; // 짝수인 경우 true 반환
}
// 필터링된 배열로 반환
$evenNumbers = array_filter($numbers, 'isEven');
print_r($evenNumbers);
/*
출력: 원본 배열의 키(인덱스)를 그대로 유지
Array
(
[1] => 2
[3] => 4
[5] => 6
[7] => 8
[9] => 10
)
*/
// 주의 사항: 필터링된 배열에서의 인덱스 처리
var_dump($even_numbers[0]); // null
이 코드에서 주의해야 할 점은, 필터링된 배열인 $even_numbers는 원본 배열 $array에서 짝수만 필터링하여 생성되지만, 첫 번째 요소에 0부터 시작하는 키(인덱스)를 가진 요소가 없습니다. 필터링된 배열의 키(인덱스)는 원본 배열과 동일하기 때문입니다. 따라서, $even_numbers[0]으로 첫 번째 요소에 접근하면 예상과 다른 결과가 발생합니다, 이 경우에는 null이 됩니다.
콜백 함수를 제공하지 않았을 경우
PHP 8.0.0 버전부터는 array_filter() 함수에 두 번째 매개변수인 콜백 함수를 제공하지 않으면 E_WARNING 경고가 발생합니다.
$data = ['apple', '', 'banana', null, 'cherry'];
// 빈 값 제거
$filteredData = array_filter($data); // 콜백 함수를 제공하지 않았을 경우
// 결과 출력
print_r($filteredData);
다양한 활용 사례
array_filter() 함수는 다양한 배열 필터링 작업에 사용될 수 있으며, 다음은 그 중 일부 예제입니다.
특정 값으로 시작하는 요소만 필터링
array_filter() 함수를 사용하면 특정 값으로 시작하는 요소만 필터링할 수 있습니다.
다음은 "a"로 시작하는 문자열만으로 구성된 새로운 배열을 만드는 예입니다.
$array = ["apple", "banana", "cat", "dog", "elephant"];
$strings_starting_with_a = array_filter($array, function ($string) {
return $string[0] == "a";
});
print_r($strings_starting_with_a);
/*
출력:
Array
(
[0] => apple
)
*/
빈 값 제거
열의 빈 값을 제거할 때 array_filter() 함수와 empty() 함수를 함께 사용하는 것은 매우 효과적입니다. 이를 통해 배열을 정리하고 빈 값을 간단하게 제거할 수 있습니다. 아래의 예제를 통해 설명해보겠습니다.
$data = ['apple', '', 'banana', null, 'cherry'];
// 빈 값을 제거하는 콜백 함수를 제공
$filteredData = array_filter($data, function ($value) {
return !empty($value);
});
// 결과 출력
print_r($filteredData);
/*
출력:
Array
(
[0] => apple
[2] => banana
[4] => cherry
)
*/
연관 배열에서 특정 조건 충족하는 항목 필터링
array_filter() 함수로 연관 배열의 값을 기준으로 필터링하는 예제입니다.
array_filter() 함수는 주로 값을 기준으로 필터링하는 데에 사용됩니다. 키와 값을 모두 고려해야 하는 경우에는 다른 방법이 더 적합할 수 있습니다.
$scores = [
'Alice' => 85,
'Bob' => 92,
'Carol' => 78,
'David' => 95
];
// 점수가 90 이상인 학생 필터링
$topScorers = array_filter($scores, function ($value) {
return $value >= 90;
});
// 결과 출력
print_r($topScorers);
/*
출력:
Array
(
[Bob] => 92
[David] => 95
)
*/
같이 보기
- PHP isset() 함수와 empty() 함수 – 개념 정리 및 사용법과 차이점
- PHP array_map() 함수 – 개념 정리 및 사용 예제
- PHP foreach() 반복문 사용법 및 활용 예제
- PHP array_reduce() 함수 – 개념 정리 및 사용 예제
- PHP array_search() 함수 – 개념 정리 및 사용 예제
- PHP array_keys() 함수 – 배열 키 목록 가져오기
- PHP 배열 값이 있는지 확인하는 in_array() 함수
- PHP array_values() 함수 – 배열 값 목록 가져오기
- PHP array_slice() 함수 - 개념 정리 및 사용 예제
- PHP array_diff() 함수 - 다른 배열에 없는 값 찾기
- PHP array_diff_assoc() 함수 - 키를 기준으로 다른 배열에 없는 값 찾기
- PHP array_intersect() 함수 - 다른 배열과의 공통 값 찾기
- PHP array_intersect_assoc() 함수 - 키와 값을 기준으로 다른 배열과의 공통 요소 찾기
- 자바스크립트 filter() 함수 – 개념 정리 및 사용 예제