За последние 24 часа нас посетили 17526 программистов и 1723 робота. Сейчас ищут 1612 программистов ...

Найти дубли в элементах массива и сложить значения

Тема в разделе "PHP для новичков", создана пользователем TigerZaka, 29 июн 2016.

  1. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Всем привет!
    есть массив следующего вида:
    PHP:
    1. $m = [
    2.     0 => [
    3.         'name' => 'гороховый',
    4.         'category' => 'суп',
    5.         'counts' => 1
    6.     ],
    7.     1 => [
    8.         'name' => 'ножки',
    9.         'category' => 'горячее',
    10.         'counts' => 2
    11.     ],
    12.     2 => [
    13.         'name' => 'ножки',
    14.         'category' => 'горячее',
    15.         'counts' => 3
    16.     ],
    17.     3 => [
    18.         'name' => 'сок',
    19.         'category' => 'напиток',
    20.         'counts' => 2
    21.     ],
    22.     4 => [
    23.         'name' => 'картошка',
    24.         'category' => 'гарнир',
    25.         'counts' => 4
    26.     ]
    27. ];
    Хочу вывести так:
    HTML:
    1. Суп
    2.     гороховый - 1шт.
    3. Горячее
    4.     ножки - 5шт.
    5. Напиток
    6.     сок - 2шт.
    7. Гарнир
    8.     картошка - 4шт.
    Подскажите, как правильно пробежаться по массиву находя дубли еды и складывая количество одинаковых блюд?
    Пробовал через in_array проверять, но дальше логику не пойму, как убирать лишнее
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Наверняка твой массив взялся из БД. Нехорошо перекладывать обработку множеств с SQL на PHP.

    Код (Text):
    1. SELECT `category`, `name`, SUM(`counts`) AS `counts`
    2. FROM `mytable`
    3. GROUP BY `category`, `name`
    --- Добавлено ---
    Как побочный эффект, результат будет отсортирован по категории+блюду. Это можно использовать при выводе, чтобы выделять "группы".

    Псевдокод
    PHP:
    1. $category = null;
    2. while (трам-пам-пам) {
    3.   if ($category !== $row['category']) {
    4.     $category = $row['category'];
    5.     echo '<h2>'.$category.'</h2>';
    6.   }
    7.   . . . тыц-тыц-тыц-тыры . . .
    8. }