Scratches
Добрый день!
Подскажите пожалуйста как обработать массив данных, а именно обойти массив и объединить повторяющиеся значения по 2м ключам [domain] и [f_country], по следующему ключу [cms] объединить массивы и по последнему ключу [count_id] просуммировать значения?Для понимания привожу таблицу для которой я это делаю.
Текущий код:
PHP:
( ( [domain] => .com [f_country] => Международный (коммерция) ( [0] => WordPress [1] => 1801 ) [count_id] => 1801 ) ( [domain] => .com [f_country] => Международный (коммерция) ( [0] => DLE [1] => 25 ) [count_id] => 25 ) ( [domain] => .de [f_country] => Германия ( [0] => WordPress [1] => 313 ) [count_id] => 313 ) )Что хочу получить:
PHP:
( ( [domain] => .com [f_country] => Международный (коммерция) ( ( [0] => WordPress [1] => 1801 ) ( [0] => DLE [1] => 25 ) ) [count_id] => 1826 ) ( [domain] => .de [f_country] => Германия ( [0] => WordPress [1] => 313 ) [count_id] => 313 ) )
Drunkenmunky
Создайте новый массив.
Запустите в цикл исходный массив.
Извлекайте ключ, по которому хотите что-то просуммировать.
Если в новом массиве такого ключа нет, то добавляйте новый элемент с извлеченным ключом.
Если такой ключ есть в новом массиве, то к нужным значениям его элементов добавляйте значения текущего.
P.S. Если нужен примерный код, то предоставьте массив в таком виде, в котором его не нужно дополнительно править после copypaste
Scratches
Всем спасибо. В итоге решил просто делать 2 запроса к базе и сравнивать 2 массива.
Если вдруг у кого будут подобные вопросы, прикладываю код:
PHP:
$select_row = $db->query(«SELECT `cms`,`domain`, COUNT(*) AS count_cms FROM prs_cmssites GROUP BY cms,domain ORDER BY count_cms DESC»); if ($select_row->num_rows > 0) { while ($ras = $select_row->fetch_assoc()) { $arrcms[] = $ras; } } $select_row2 = $db->query(«SELECT `domain`, `f_country`, COUNT(*) AS count_id FROM prs_cmssites,prs_flags WHERE prs_cmssites.domain=prs_flags.f_domain GROUP BY domain ORDER BY count_id DESC LIMIT 10″); if ($select_row2->num_rows > 0) { while ($row = $select_row2->fetch_assoc()) { $allarray[] = $row; } foreach ($allarray as $key=>$value) { foreach ($arrcms as $key2=>$value2) { if ($allarray[$key][‘domain’] == $arrcms[$key2][‘domain’]) { $allarray[$key][‘cms’][$arrcms[$key2][‘cms’]] = $arrcms[$key2][‘count_cms’]; } } } echo ‘<pre>’; echo ‘</pre>’; ; } else { echo ‘Нет данных’; }Итог:
Код (Text):
Array ( [0] => Array ( [domain] => .com [f_country] => Международный (коммерция) [count_id] => 2435 [cms] => Array ( [Wordpress] => 2427 [DataLife Engine] => 8 ) ) [1] => Array ( [domain] => .org [f_country] => Международный (организации) [count_id] => 864 [cms] => Array ( [Wordpress] => 864 ) ) )