У меня многомерный массив, и я пытаюсь группировать значение одним ключом.
Так
Array ( [0] => Array ( [name] => Edward Foo [desc_topic] => Array ( [0] => Apple [1] => Banana [2] => Orange ) [qtd_posts] => Array ( [0] => 10 [1] => 20 [2] => 50 ) ) [1] => Array ( [name] => Michael Max [desc_topic] => Array ( [0] => Apple [1] => Banana [2] => Orange ) [qtd_posts] => Array ( [0] => 10 [1] => 10 [2] => 10 ) ) [2] => Array ( [name] => Edward Foo [desc_topic] => Array ( [0] => Apple [1] => Banana [2] => Orange ) [qtd_posts] => Array ( [0] => 5 [1] => 10 [2] => 30 ) ) [3] => Array ( [name] => Michael Max [desc_topic] => Array ( [0] => Apple [1] => Banana [2] => Orange ) [qtd_posts] => Array ( [0] => 8 [1] => 8 [2] => 20 ) )
И мне действительно нужно:
Array ( [0] => Array ( [name] => Edward Foo [desc_topic] => Array ( [0] => Apple [1] => Banana [2] => Orange ) [qtd_posts] => Array ( [0] => 15 [1] => 30 [2] => 80 ) ) [1] => Array ( [name] => Michael Max [desc_topic] => Array ( [0] => Apple [1] => Banana [2] => Orange ) [qtd_posts] => Array ( [0] => 18 [1] => 18 [2] => 30 ) ) )
Я предполагаю следующее:
desc_topic
(например, все они имеют одинаковые значения Apple / Banana / Orange для каждого экземпляра. qtd_posts
имеет подлежащие группировке значения в одинаковых соответствующих слотах (например, все записи «1» должны быть суммированы вместе, все «2» записи суммируются вместе и т. д.) Если это применимо, тогда что-то вроде этого должно работать:
$newarr = array(); $reverse_map = array(); foreach($array as $idx => $entry) { if (isset($reverse_map[$entry['name']]) { // have we seen this name before? retrieve its original index value $idx = $reverse_map[$entry['name']]; } else { // nope, new name, so store its index value $reverse_map[$entry['name']] = $idx; } // copy the 'constant' values $newarr[$idx]['name'] = $entry['name']; $newarr[$idx]['desc_top'] = $entry['desc_topic']; // sum the qtd_post values to whatever we previously stored. foreach($entry['qtd_posts'] as $x => $y) { $newarr[$idx]['qtd_posts'][$x] += $y; } }