3v4l.org

run code in 300+ PHP versions simultaneously
<?php $array = [ [ 'name' => 'Edward Foo', 'desc_topic' => ['Apple', 'Banana', 'Orange'], 'qtd_posts' => [10, 20, 50 ], ], [ 'name' => 'Michael Max', 'desc_topic' => ['Apple', 'Banana', 'Orange'], 'qtd_posts' => [10, 10, 10 ], ], [ 'name' => 'Edward Foo', 'desc_topic' => ['Apple', 'Banana', 'Orange'], 'qtd_posts' => [5, 10, 50 ], ], [ 'name' => 'Michael Max', 'desc_topic' => ['Apple', 'Banana', 'Lemon'], 'qtd_posts' => [8, 8, 55 ], ], ]; $result = []; foreach ($array as $row) { extract($row); if (!isset($result[$name])) { $result[$name] = $row; } else { foreach ($desc_topic as $i => $topic) { $index = array_search($topic, $result[$name]['desc_topic']); if ($index === false) { // create new column in both subarrays $result[$name]['desc_topic'][] = $topic; $result[$name]['qtd_posts'][] = $qtd_posts[$i]; } else { // sum preexisting value with new value in on same topic $result[$name]['qtd_posts'][$index] += $qtd_posts[$i]; } } } } var_export(array_values($result));
Output for 8.0.1 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.7
array ( 0 => array ( 'name' => 'Edward Foo', 'desc_topic' => array ( 0 => 'Apple', 1 => 'Banana', 2 => 'Orange', ), 'qtd_posts' => array ( 0 => 15, 1 => 30, 2 => 100, ), ), 1 => array ( 'name' => 'Michael Max', 'desc_topic' => array ( 0 => 'Apple', 1 => 'Banana', 2 => 'Orange', 3 => 'Lemon', ), 'qtd_posts' => array ( 0 => 18, 1 => 18, 2 => 10, 3 => 55, ), ), )

preferences:
110.2 ms | 403 KiB | 91 Q