현재 위치: > 최신 기사 목록> Array_Chunk에서 array_reduce를 사용하여 데이터를 집계하는 방법

Array_Chunk에서 array_reduce를 사용하여 데이터를 집계하는 방법

M66 2025-04-26

PHP에서 Array_chunkArray_reduce 는 두 가지 매우 강력한 배열 작동 기능입니다. Array_Chunk는 큰 배열을 여러 개의 작은 배열로 나눌 수있는 반면 Array_Reduce는 배열에서 요소를 재귀 적으로 처리 한 다음 집계 할 수 있습니다. 경우에 따라 배열을 그룹화하고 그룹화 후 일종의 집계 작업을 수행하려고합니다. 이 기사는이 두 기능을 결합 하여이 목표를 달성하는 방법을 설명합니다.

1. Array_Chunk 함수의 기본 사용

Array_chunk 는 배열을 여러 개의 작은 배열로 나누는 PHP의 함수입니다. 원래 배열을 지정된 크기에 따라 여러 하위 배열로 나누고 2 차원 배열을 반환합니다. 예를 들어:

 $array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$chunks = array_chunk($array, 3);
print_r($chunks);

출력 결과는 다음과 같습니다.

 Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    [1] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    [2] => Array
        (
            [0] => 7
            [1] => 8
            [2] => 9
        )
)

이 예에서 Array_Chunk는 원래 배열을 크기 3의 3 개의 서브 배달로 나눕니다.

2. array_reduce 함수의 기본 사용

array_reduce 함수는 배열과 콜백 함수를 매개 변수로 받아들이고 배열의 요소에서 "감소"작업을 수행합니다. 배열의 첫 번째 요소로 시작하여 이전 요소의 결과와 함께 현재 요소를 콜백 함수로 전달하여 결국 단일 값을 반환합니다. 예를 들어:

 $array = [1, 2, 3, 4, 5];
$sum = array_reduce($array, function($carry, $item) {
    return $carry + $item;
});
echo $sum;  // 산출 15

이 예에서는 Array_Reduce가 배열에서 요소를 축적하고 마지막으로 배열의 합을 반환합니다.

3. array_chunkarray_reduce를 그룹화 및 집계 데이터로 결합합니다.

이제 Array_chunkArray_reduce 의 기본 사용법을 알았으므로 배열의 그룹화 및 집계를 구현하기 위해이를 결합하려고 시도 할 수 있습니다.

사용자 주문 데이터가 포함 된 배열이 있다고 가정하고 사용자 ID별로 주문을 그룹화하고 각 사용자의 총 주문 금액을 계산하려고합니다. 먼저 Array_Chunk를 사용하여 사용자 ID로 그룹화 한 다음 Array_ReDuce를 사용하여 각 데이터 세트를 집계하고 계산할 수 있습니다.

 // 다음 순서 데이터를 사용할 수 있다고 가정하십시오,각 순서에는 하나가 포함됩니다 user_id 그리고 금액 amount
$orders = [
    ['user_id' => 1, 'amount' => 100],
    ['user_id' => 2, 'amount' => 200],
    ['user_id' => 1, 'amount' => 150],
    ['user_id' => 3, 'amount' => 300],
    ['user_id' => 2, 'amount' => 50],
    ['user_id' => 1, 'amount' => 200],
];

// 사용 array_chunk ~에 따르면 user_id 그룹 주문
$chunks = array_chunk($orders, 2);  // 그룹당 최대 두 개의 주문이 있다고 가정합니다.

// 사용 array_reduce 그룹당 골재 순서 금액
$result = array_map(function($chunk) {
    return array_reduce($chunk, function($carry, $item) {
        $carry['user_id'] = $item['user_id'];
        $carry['total_amount'] += $item['amount'];
        return $carry;
    }, ['total_amount' => 0]);
}, $chunks);

// 산출结果
print_r($result);

출력 결과 :

 Array
(
    [0] => Array
        (
            [user_id] => 1
            [total_amount] => 250
        )
    [1] => Array
        (
            [user_id] => 2
            [total_amount] => 250
        )
    [2] => Array
        (
            [user_id] => 3
            [total_amount] => 300
        )
)

이 예에서는 먼저 Array_Chunk를 사용하여 그룹당 2 개의 주문별로 주문 데이터를 그룹화합니다. 그런 다음 각 사용자의 총 주문 금액을 계산하기 위해 array_reduce를 사용하여 각 주문 그룹을 집계합니다.

4. 완전한 예

위의 작업을 전체 기능으로 캡슐화하면 코드는 다음과 같습니다.

 function groupAndAggregateOrders($orders) {
    // ~에 따르면用户 ID 그룹화
    $chunks = array_chunk($orders, 2);  // 그룹당 최대 두 개의 주문이 있다고 가정합니다.

    // 对每个그룹화计算用户的总订单金额
    return array_map(function($chunk) {
        return array_reduce($chunk, function($carry, $item) {
            $carry['user_id'] = $item['user_id'];
            $carry['total_amount'] += $item['amount'];
            return $carry;
        }, ['total_amount' => 0]);
    }, $chunks);
}

// 테스트 데이터
$orders = [
    ['user_id' => 1, 'amount' => 100],
    ['user_id' => 2, 'amount' => 200],
    ['user_id' => 1, 'amount' => 150],
    ['user_id' => 3, 'amount' => 300],
    ['user_id' => 2, 'amount' => 50],
    ['user_id' => 1, 'amount' => 200],
];

// 호출 기능
$result = groupAndAggregateOrders($orders);

// 산출结果
print_r($result);

5. 요약

Array_ChunkArray_reduce를 결합하여 배열을 쉽게 그룹화하고 집계 할 수 있습니다. Array_Chunk는 데이터를 여러 그룹으로 분할 할 수 있으며 Array_Reduce 는 각 그룹 내에서 사용자 정의 집계 계산을 수행 할 수 있습니다. 이 두 가지의 조합은 코드의 가독성과 복잡한 데이터를 처리하는 능력을 크게 향상시킬 수 있습니다.