PHP에서 Array_chunk 및 Array_reduce 는 두 가지 매우 강력한 배열 작동 기능입니다. Array_Chunk는 큰 배열을 여러 개의 작은 배열로 나눌 수있는 반면 Array_Reduce는 배열에서 요소를 재귀 적으로 처리 한 다음 집계 할 수 있습니다. 경우에 따라 배열을 그룹화하고 그룹화 후 일종의 집계 작업을 수행하려고합니다. 이 기사는이 두 기능을 결합 하여이 목표를 달성하는 방법을 설명합니다.
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 개의 서브 배달로 나눕니다.
array_reduce 함수는 배열과 콜백 함수를 매개 변수로 받아들이고 배열의 요소에서 "감소"작업을 수행합니다. 배열의 첫 번째 요소로 시작하여 이전 요소의 결과와 함께 현재 요소를 콜백 함수로 전달하여 결국 단일 값을 반환합니다. 예를 들어:
$array = [1, 2, 3, 4, 5];
$sum = array_reduce($array, function($carry, $item) {
return $carry + $item;
});
echo $sum; // 산출 15
이 예에서는 Array_Reduce가 배열에서 요소를 축적하고 마지막으로 배열의 합을 반환합니다.
이제 Array_chunk 및 Array_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를 사용하여 각 주문 그룹을 집계합니다.
위의 작업을 전체 기능으로 캡슐화하면 코드는 다음과 같습니다.
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);
Array_Chunk 및 Array_reduce를 결합하여 배열을 쉽게 그룹화하고 집계 할 수 있습니다. Array_Chunk는 데이터를 여러 그룹으로 분할 할 수 있으며 Array_Reduce 는 각 그룹 내에서 사용자 정의 집계 계산을 수행 할 수 있습니다. 이 두 가지의 조합은 코드의 가독성과 복잡한 데이터를 처리하는 능력을 크게 향상시킬 수 있습니다.