array_reduce()
함수
array_reduce()
함수는
배열의 모든 요소에 콜백 함수를 적용하여 하나의 결과 값을 생성하는 함수입니다.
배열의 요소들을 하나로 줄여(reduce) 집계한 값을 반환합니다.
/**
* array_reduce() 함수를 사용해서
* 배열의 모든 요소를 더해 누적된 하나의 값을 생성하는 예제
*/
// array_reduce() 함수를 적용할 배열
$array = [1, 2, 3, 4, 5];
// 개발자가 직접 작성한 콜백 함수
function sum($total, $number) {
// 이전의 결과 값과 현재 요소를 더합니다.
return $total + $number;
}
// 배열의 모든 요소에 콜백 함수를 적용하여 집계한 하나의 결과 값을 반환
$result = array_reduce($array, 'sum');
echo $result; // 출력: 15
array_reduce()
함수의 형식은 다음과 같습니다.
구문
array_reduce(array $array, callable $callback, mixed $initial = null): mixed
매개변수
$array |
array_reduce() 함수에 적용할 배열입니다. |
---|---|
$callback |
배열의 각 요소를 처리하는 콜백 함수입니다.
콜백 함수의 매개변수: $callback($carry, $item)
|
$initial |
옵션. 초기 누적 값입니다.
이 매개변수를 생략하면 첫 번째 배열 요소가 초기 누적 값으로 사용됩니다. |
반환 값
결과 값을 반환합니다.
배열이 비어 있고 $initial
이 전달되지 않으면 null
을 반환합니다.
콜백 함수의 작동 원리
callback(mixed $carry, mixed $item): mixed
array_reduce()
함수에서 사용하는 콜백 함수의 구조
/**
* 콜백 함수
*
* 기명 함수(사용자 정의 함수)나 익명 함수 등으로 사용할 수 있습니다.
*/
/* 콜백 함수를 기명 함수를 사용할 경우 */
function callback($carry, $item) { // 기명 함수 정의
// 누적된 하나의 값 로직: 누적된 결과를 반환해야 합니다.
}
array_reduce($array, 'callback'); // 정의한 기명 함수명을 매개변수에 문자열로 직접 전달
/* 콜백 함수를 익명 함수로 사용할 경우 */
array_reduce($array, function($carry, $item) {
// 누적된 하나의 값 로직: 누적된 결과를 반환해야 합니다.
});
array_reduce()
함수의 매개변수로 전달되는 콜백 함수는 배열의 요소를 처리하고 하나의 결과 값을 생성하는 핵심 역할을 합니다. 이 콜백 함수는 반복(iteration)이 진행됨에 따라 호출되며, 이전 반복의 결과 값을 $carry
변수에 보관하고 현재 요소의 값을 $item
변수에 제공합니다. 아래는 콜백 함수의 작동 원리를 자세히 설명한 것입니다.
- 첫 번째 반복(iteration):
array_reduce()
함수가 호출되면 먼저 초깃값($initial
)과 배열의 첫 번째 요소가 콜백 함수로 전달됩니다.$carry
: 초깃값($initial
)의 값이$carry
변수에 할당됩니다.$item
: 배열의 첫 번째 요소의 값이$item
변수에 할당됩니다.- 콜백 함수가 호출되고, 이전 반복의 결과값(
$carry
)과 현재 요소($item
)를 활용하여 새로운 값을 반환합니다.
- 두 번째 반복(iteration)부터: 이후의 반복에서는 초깃값(
$initial
)은 사용되지 않습니다. 대신, 이전 반복의 결과값($carry
)과 현재 요소($item
)가 콜백 함수로 전달됩니다.-
$carry
: 이전 반복에서 반환된 값(이전 결과 값)이$carry
변수에 할당됩니다. -
$item
: 다음 배열 요소의 값이$item
변수에 할당됩니다. -
콜백 함수가 호출되고, 이전 반복의 결과값(
$carry
)과 현재 요소($item
)를 활용하여 새로운 값을 반환합니다.
-
- 반복 종료: 배열의 모든 요소가 처리될 때까지 이 반복과 결과 값의 계산이 반복됩니다.
- 최종 결과 반환: 배열의 모든 요소가 처리된 후,
array_reduce()
함수는 마지막 콜백 함수 호출의 반환값을 최종 결과 값으로 반환합니다.
요약하면, array_reduce()
함수는 배열의 각 요소를 처리하면서 콜백 함수를 호출하고, 콜백 함수는 이전 반복의 결과값($carry
)과 현재 요소($item
)를 기반으로 새로운 값을 반환합니다. 이를 반복하여 하나의 최종 결과 값을 생성합니다. 이러한 메커니즘을 사용하면 배열의 요소를 하나의 결과 값으로 생성해서 집계할 때 콜백 함수를 활용할 수 있습니다.
array_reduce()
함수의 다양한 활용 사례
array_reduce()
함수는 주로 다음과 같은 예제의 목적으로 사용됩니다.
배열의 모든 요소를 더하기
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, function ($carry, $item) {
return $carry + $item;
});
echo "배열의 모든 요소를 더한 결과: $sum"; // 출력: '배열의 모든 요소를 더한 결과: 15'
배열의 모든 요소를 곱하기
$numbers = [2, 3, 4, 5];
$product = array_reduce($numbers, function ($carry, $item) {
return $carry * $item;
}, 1); // 초기 누적 값은 1로 설정
echo "배열의 모든 요소를 곱한 결과: $product"; // 출력: '배열의 모든 요소를 곱한 결과: 120'
위의 코드에서는 초기 누적 값으로 1을 사용하고, 각 요소를 곱하여 결과를 누적합니다. 초기 누적 값을 0으로 설정하면 모든 값이 0으로 곱해지므로 1을 사용하는 것이 중요합니다.
배열의 최솟값 찾기
$numbers = [5, 3, 9, 2, 7];
$min = array_reduce($numbers, function ($carry, $item) {
return ($item < $carry) ? $item : $carry;
}, $numbers[0]);
echo "배열의 최솟값: $min"; // 출력: '배열의 최솟값: 2'
위의 코드에서는 초기 누적 값을 배열의 첫 번째 요소인 $numbers[0]
로 설정하고, 콜백 함수에서 현재 요소가 누적 값보다 작으면 현재 요소를 최솟값으로 선택합니다.
배열의 최댓값 찾기
$numbers = [5, 3, 9, 2, 7];
$max = array_reduce($numbers, function ($carry, $item) {
return ($item > $carry) ? $item : $carry;
}, $numbers[0]);
echo "배열의 최댓값: $max"; // 출력: '배열의 최댓값: 9'
위의 코드에서도 초기 누적 값을 배열의 첫 번째 요소로 설정하고, 콜백 함수에서 현재 요소가 누적 값보다 크면 현재 요소를 최댓값으로 선택합니다.
배열의 모든 요소를 문자열로 결합하기
$words = ['Hello', ' ', 'World', '!'];
$concatenated = array_reduce($words, function ($carry, $item) {
return $carry . $item;
}, '');
echo "배열의 모든 요소를 결합한 결과: $concatenated"; // 출력: '배열의 모든 요소를 결합한 결과: Hello World!'
// implode() 함수를 사용할 수 있습니다.
$implode = implode('', $words);
echo $implode; // 출력: 'Hello World!'
위의 코드에서는 초기 누적 값을 빈 문자열(''
)로 설정하고, 콜백 함수에서 현재 요소를 누적 값에 문자열 결합(.
)하여 결과를 얻습니다. 따라서 배열의 모든 요소가 하나의 문자열로 결합됩니다.
위 예제의 경우 배열을 문자열로 변환하는 PHP의 내장 함수인 implode()
함수를 사용하는 것이 더 효율적일 수 있습니다.
array_reduce()
함수를 사용하면 배열의 요소를 반복하면서 사용자 지정 논리를 적용하여 결과를 누적하는 데 유용하게 사용할 수 있습니다. 이를 통해 배열의 요소를 결합하거나 다른 형태로 변환하는 작업을 수행할 수 있습니다.