Menu
CoddyTech

'array_reduce'로 데이터 축소하기

Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨. 68개 중 43번째.

array_reduce() 함수는 array_map() 및 array_filter()와는 다른 접근 방식을 취합니다. 새 배열을 반환하는 대신, 배열의 모든 요소를 처리하여 하나의 값을 만들어 냅니다. 따라서 합계를 계산하거나 최댓값을 찾거나 모든 요소를 하나의 결과로 결합하는 작업에 적합합니다.

이 함수는 처리할 배열과 요소를 결합하는 방법을 정의하는 콜백 함수를 받으며, 선택 사항인 세 번째 매개변수인 초기값도 받습니다. 콜백 함수는 두 개의 매개변수, 즉 누적된 결과("carry"라고 함)와 현재 배열 요소를 받습니다.

<?php
function addNumbers($carry, $item) {
    return $carry + $item;
}

$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, "addNumbers", 0);
// 결과: 15
?>

이 예제에서 함수는 초기값 0으로 시작한 다음, 누적 합계와 각 배열 요소를 사용해 addNumbers를 반복해서 호출합니다. 이 누적 과정은 모든 요소를 처리할 때까지 계속되며, 마지막에는 최종 축약값이 남습니다.

challenge icon

챌린지

쉬움

두 가지 입력을 받습니다. 쉼표로 구분된 숫자 목록과 연산 유형입니다. 첫 번째 입력에는 5,10,15,20,25 형식의 문자열로 숫자가 포함되며, 두 번째 입력은 연산을 나타내는 단일 문자입니다. S는 합계, P는 곱, M은 최댓값을 의미합니다.

두 입력을 모두 읽고, 쉼표로 구분된 숫자를 정수 배열로 변환한 다음, 지정된 연산을 수행하는 사용자 지정 콜백 함수를 만드세요. 적절한 초기값과 콜백 함수를 사용해 array_reduce()로 모든 숫자를 하나의 결과로 처리하고, 최종 결과를 출력하세요.

연산 세부 정보:

  • S (합계): 모든 숫자를 더합니다 (초기값: 0)
  • P (곱): 모든 숫자를 곱합니다 (초기값: 1)
  • M (최댓값): 가장 큰 숫자를 찾습니다 (초기값: 배열의 첫 번째 숫자 또는 매우 작은 숫자)

콜백 함수는 두 개의 매개변수를 받아야 합니다. 누적된 결과(carry)와 현재 배열 요소(item)이며, 연산 유형에 따라 갱신된 누적값을 반환해야 합니다.

입력 형식:

  • 첫 번째 줄: 쉼표로 구분된 숫자 (예: 5,10,15,20,25)
  • 두 번째 줄: 연산 유형 - S, P, M 중 하나 (예: S)

예상 출력: reduce 연산 결과를 나타내는 단일 숫자

직접 해보기

<?php
// 입력값 읽기
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));

// 쉼표로 구분된 문자열을 정수 배열로 변환하기
$numbers = array_map('intval', explode(',', $numbers_input));

// TODO: 아래에 코드를 작성하세요
// 연산 유형에 따라 콜백 함수 만들기
// 콜백 함수와 적절한 초기값으로 array_reduce() 사용하기


// 결과 출력하기
echo $result;
?>
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리 & 흐름의 모든 레슨

직접 연습해 보세요: 온라인 PHP 컴파일러