>  기사  >  백엔드 개발  >  PHP에서 다차원 배열 데이터를 여러 열로 그룹화하고 값을 집계하려면 어떻게 해야 합니까?

PHP에서 다차원 배열 데이터를 여러 열로 그룹화하고 값을 집계하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-07 03:53:02259검색

How do I Group Multidimensional Array Data by Multiple Columns and Aggregate Values in PHP?

다차원 배열 데이터를 여러 열로 그룹화하고 값 집계

문제 설명:

귀하 두 개의 개별 데이터베이스 쿼리의 데이터를 결합하는 다차원 배열이 있습니다. 배열은 "부분", "주소", "유형" 및 "개수"를 포함하는 속성을 가진 레코드로 구성됩니다. 목표는 "part" 및 "type" 값을 기준으로 배열 요소를 그룹화하고 각 그룹 내 "count" 값의 합계를 계산하는 것입니다.

입력 예:

<code class="php">$arr1 = [
    ['part' => '1', 'address' => 'aaa', 'type' => '1', 'count' => 5],
    ['part' => '1', 'address' => 'bbb', 'type' => '1', 'count' => 5],
    ['part' => '1', 'address' => 'ccc', 'type' => '1', 'count' => 5],
    ['part' => '2', 'address' => 'aaa', 'type' => '1', 'count' => 5],
    ['part' => '2', 'address' => 'bbb', 'type' => '1', 'count' => 5],
    ['part' => '2', 'address' => 'ccc', 'type' => '2', 'count' => 5]
];</code>

예상 출력:

<code class="php">$arr2 = [
    ['part' => '1', 'type' => '1', 'count' => 15],
    ['part' => '2', 'type' => '1', 'count' => 10],
    ['part' => '2', 'type' => '2', 'count' => 5]
];</code>

해결책:

원하는 그룹화 및 집계를 달성하기 위해 다음을 활용할 수 있습니다. PHP의 배열 조작 함수. 다음 함수를 고려해 보세요.

<code class="php">function groupByPartAndType($input) {
  $output = Array();

  foreach($input as $value) {
    $output_element = & $output[$value['part'] . "_" . $value['type']];
    $output_element['part'] = $value['part'];
    $output_element['type'] = $value['type'];
    !isset($output_element['count']) && $output_element['count'] = 0;
    $output_element['count'] += $value['count'];
  }

  return array_values($output);
}</code>

이 함수를 입력 배열 $arr1에 적용하면 원하는 출력 $arr2를 얻을 수 있습니다. 출력 배열의 각 요소는 해당 "개수" 값의 합계와 함께 동일한 "부품" 및 "유형" 값을 공유하는 데이터 포인트 그룹을 나타냅니다.

대체 접근 방식:

두 데이터베이스 쿼리가 모두 동일한 데이터베이스 서버에서 발생하는 경우 잠재적으로 SQL의 GROUP BY 기능을 사용하여 데이터베이스 자체 내에서 그룹화 및 집계를 수행할 수 있으므로 PHP에서 후처리가 필요하지 않습니다.

위 내용은 PHP에서 다차원 배열 데이터를 여러 열로 그룹화하고 값을 집계하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.