如何在 PHP 中对相似键上的关联数组元素进行分组

How to Group associative array elements on similar keys in PHP

我有以下数组

$array = [ 
    { "key": "2.1", "value": "11", "quantity": "1" }, 
    { "key": "2.1", "value": "22", "quantity": "1" }, 
    { "key": "2.5", "value": "19", "quantity": "1" } 
]

现在我想按相似的键对其进行分组。

输出应该是:

$array = [ 
    { "key": "2.1", "value": "11, 22", "quantity": "2" }, 
    { "key": "2.5", "value": "19", "quantity": "1" } 
]

我试过这样,但没有用:

    $remove_key = [];

    for($len=0; $len<count($array); $len++) {
       if( isset($array[$len+1]) AND
             $array[$len]['key'] == $array[$len+1]['key']
         ) {
             $array[$len]['value'] = $array[$len]['value'] .', '. $array[$len+1]['value'];
             $array[$len]['quantity'] = $array[$len]['quantity'] + $array[$len+1]['quantity'];

              array_push($remove_key, $len+1);
         }

    }

    for($rem=0; $rem<count($remove_key); $rem++) {
        unset($array[$remove_key[$rem]]);
    }

    $array = array_values(($array));

一个简单的 foreach()json_encode() 就可以完成这项工作:

<?php

$json = '[ 
    { "key": "2.1", "value": "11", "quantity": "1" }, 
    { "key": "2.1", "value": "22", "quantity": "1" }, 
    { "key": "2.5", "value": "19", "quantity": "1" } 
]';

$array = json_decode($json,true);

$final = [];

foreach($array as $arr){
    
    $final[$arr['key']]['key'] = $arr['key'];
    $final[$arr['key']]['value'] = (isset($final[$arr['key']]['value'])) ? $final[$arr['key']]['value'].','. $arr['value'] : $arr['value'];
    $final[$arr['key']]['quantity'] = (isset($final[$arr['key']]['quantity'])) ?  $final[$arr['key']]['quantity']+ $arr['quantity'] : $arr['quantity'];
}

echo $json = json_encode(array_values($final));

输出:https://3v4l.org/H6grg