-1

How can I make this array:

Array
(
[0] => Array
    (
        [id] => 3412341233214
        [number] => 21000
    )

[1] => Array
    (
        [id] => 12121212121212
        [number] => 18000
    )

[2] => Array
    (
        [id] => 12121212121212
        [number] => 17000
    )
)

Look like the one below, where [1] and [2] have been merged into a single array based on having the same id and the number has been added together.

Array
(
[0] => Array
    (
        [id] => 3412341233214
        [number] => 21000
    )

[1] => Array
    (
        [id] => 12121212121212
        [number] => 35000
    )
)
user3312792
  • 1,101
  • 2
  • 12
  • 27
  • 1
    What do you have so far and where are you stuck? – jeroen Apr 19 '18 at 14:40
  • Possible duplicate of [PHP - How to merge arrays inside array](https://stackoverflow.com/questions/17041278/php-how-to-merge-arrays-inside-array) – Máté Apr 20 '18 at 08:35
  • `$merged = array_merge($result[0], $result[1], .... $result[n]);` –  Apr 20 '18 at 08:48

1 Answers1

0

Create a $tmp array the store the number property in it.

Only store it if the id doesn't exist yet using:

if(!isset($tmp[$obj['id']]))

To make each value unique

After that, count the $tmp number with the $array number.

$tmp[$obj['id']]['number'] += $obj['number'];

https://3v4l.org/UMJ4p

$array = array(
    0 => array(
        "id" => 3412341233214,
        "number" => 21000    
    ),
    1 => array(
        "id" => 12121212121212,
        "number" => 18000    
    ),
    2 => array(
        "id" => 12121212121212,
        "number" => 17000    
    )
);

$tmp = Array();

foreach($array as $obj) {
    if(!isset($tmp[$obj['id']])) {
        $tmp[$obj['id']] = array_merge(Array('number'=>1),$obj);
        continue;
    }
    $tmp[$obj['id']]['number'] += $obj['number'];
}

print_r(array_values($tmp));

The following code results into

(
    [0] => Array
        (
            [number] => 21000
            [id] => 3412341233214
        )

    [1] => Array
        (
            [number] => 35000
            [id] => 12121212121212
        )

)
Red
  • 6,599
  • 9
  • 43
  • 85