<?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