array_filter()
함수
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
)
*/
array_filter()
함수의 형식은 다음과 같습니다.
구문
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() 함수 – 개념 정리 및 사용 예제