Intereting Posts
Не удалось отправить электронную почту из пользовательской команды Symfony2, но может из другого места в приложении Функция для подсчета числа цифр в строке Является ли mysql_real_escape_string () сломанным? Отключить отчет об ошибках полностью в производстве Laravel? выйти из системы пользователем другим пользователем (admin) в laravel 5.2 Как использовать самоподписанный сертификат с XAMPP для запросов HTTPS с использованием cURL? Табличка Zebra Stripe PHP MYSQL Разбор PHP simpleXML CodeIgniter: «Не удалось загрузить запрошенный класс» wkhtmltopdf – проблема с кодировкой полный пример gettext в php Переопределить общедоступный метод в подклассе таким образом, чтобы ограничивать доступ к общедоступным данным, сохраняя при этом доступ к родительскому классу? Memcached (не memcache) Расширение PHP в Windows Регулярное выражение в preg_replace для определения формата url и элементов выделения как я могу создать личный поддомен программным образом с помощью php

Как SUM и GROUP многомерным массивом с помощью ключа?

У меня многомерный массив, и я пытаюсь группировать значение одним ключом.

Так

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

Я предполагаю следующее:

  1. каждая запись имени в исходном массиве имеет идентичный desc_topic (например, все они имеют одинаковые значения Apple / Banana / Orange для каждого экземпляра.
  2. qtd_posts имеет подлежащие группировке значения в одинаковых соответствующих слотах (например, все записи «1» должны быть суммированы вместе, все «2» записи суммируются вместе и т. д.)
  3. Вы хотите сохранить родительские ключи массива, чтобы все записи «Edward Foo» использовали первый ключ, используемый в записи Эдварда Фу (например, 0)

Если это применимо, тогда что-то вроде этого должно работать:

 $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; } }