Search code examples
phparraysmultidimensional-arraysumgrouping

Group entries in a 3d array by one deep column and sum another deep column per group


How can I group by adult price then get the sum of adult count per group.

Sample input:

[
    [
        'Reservation' => ['adult_price' => 2000, 'adult_count' => 2],
    ],
    [
        'Reservation' => ['adult_price' => 2000, 'adult_count' => 1],
    ],
    [
        'Reservation' => ['adult_price' => 300, 'adult_count' => 1],
    ],
]

Expected Result:

[
    [
        'Reservation' => ['adult_price' => 2000, 'adult_count' => 3],
    ],
    [
        'Reservation' => ['adult_price' => 300, 'adult_count' => 1],
    ],
]

Solution

  • Try this:

    $grouped = [];
    
    foreach ($array as $item) {
        $item = $item["Reservation"];
        $currentValue = isset($grouped[$item["adult_price"]]) ? $grouped[$item["adult_price"]] : 0;
        $grouped[$item["adult_price"]] = $currentValue + $item["adult_count"];
    }
    
    $buildArray = [];
    
    foreach ($grouped as $price => $count) {
        $buildArray[] = ["Reservation" => ["adult_price" => $price, "adult_count" => $count]];
    }
    
    print_r($buildArray);
    

    https://3v4l.org/iZZ4m