Arhn - архитектура программирования

Группировать данные массива в одном столбце и суммировать данные из другого столбца

У меня есть данные массива, как показано ниже:

$array = [
    ['name' => 'Bank BRI', 'amount' => 0], 
    ['name' => 'Bank BRI', 'amount' => 0], 
    ['name' => 'Bank BCA', 'amount' => 1412341234],
    ['name' => 'Bank CIMB Niaga', 'amount' => 532532552], 
    ['name' => 'Bank BRI', 'amount' => 34534534], 
    ['name' => 'Bank CIMB Niaga', 'amount' => 453425243], 
    ['name' => 'Bank BRI', 'amount' => 0], 
    ['name' => 'Bank BNI', 'amount' => 124124], 
    ['name' => 'Bank CIMB Niaga', 'amount' => 352345623], 
    ['name' => 'Bank BCA', 'amount' => 23432423], 
    ['name' => 'Bank Mandiri', 'amount' => 0], 
    ['name' => 'Bank BCA', 'amount' => 0], 
    ['name' => 'Bank BCA', 'amount' => 0], 
    ['name' => 'Bank Permata', 'amount' => 352352353],
];

Как суммировать «сумму» на основе одного и того же «названия банка».

В моем результате должны отображаться сгруппированные имена и их сумма:

array (
  'Bank BRI' => 34534534,
  'Bank BCA' => 1435773657,
  'Bank CIMB Niaga' => 1338303418,
  'Bank BNI' => 124124,
  'Bank Mandiri' => 0,
  'Bank Permata' => 352352353,
)

Ответы:


1

Итак, сначала вам нужно $amountsArray, чтобы каким-то образом получить перечисленные вами значения. Затем:

$bankTotals = array();
foreach($amountsArray as $amount)
{
  $bankTotals[$amount['name']] += $amount['amount'];
}

После этого $bankTotals представляет собой массив, проиндексированный по названию банка, со значением общей суммы для банка. Вы можете использовать этот массив по своему усмотрению отсюда.

Одна вещь, которая может быть полезна, — это еще один цикл foreach, чтобы распечатать все это:

foreach($bankTotals as $name => $amount)
{
  echo $name.".....".$amount."\n";
}
20.07.2010
  • Спасибо JGB146 Я писал скрипты почти 3 дня безрезультатно... Решено! 20.07.2010
  • @Джеффри Блейк, что, если у нас есть два ключа для слияния. Скажем, название банка и адрес банка, сумма суммируется только в том случае, если у них одинаковые имя и адрес ... На самом деле у них есть эта проблема прямо сейчас ... Пожалуйста, помогите 21.11.2019

  • 2

    я бы предпочел добавить

    $bankTotals = array();
    foreach($amountsArray as $amount)
    {
     if(isset($bankTotals[$amount['name']]))
        $bankTotals[$amount['name']] += $amount['amount'];
     else
        $bankTotals[$amount['name']] = $amount['amount'];
    }
    
    29.03.2017

    3

    Пример на С#:

    Dictionary<string,object>[] items = {
      new Dictionary<string, object> {{ "name", "Bank BRI"}, {"amount", 0 }},
      new Dictionary<string, object> {{ "name", "Bank BRI"}, {"amount", 0 }},
      new Dictionary<string, object> {{ "name", "Bank BCA"}, {"amount", 1412341234 }},
      new Dictionary<string, object> {{ "name", "Bank CIMB Niaga"}, {"amount", 532532552 }} 
    };
    
    var amounts = new Dictionary<string, int>();
    
    foreach (var item in items) {
      string bank = (string)item["name"];
      int amount = (int)item["amount"];
      if (amounts.ContainsKey(bank)) {
        amounts[bank] += amount;
      } else {
        amounts.Add(bank, amount);
      }
    }
    
    foreach (var amount in amounts) {
      Console.WriteLine("{0}: {1}", amount.Key, amount.Value);
    }
    
    20.07.2010
  • Спасибо, попробую реализовать ваш скрипт на PHP. 20.07.2010
  • мой скрипт застрял... я все еще пытаюсь преобразовать ваш С# в PHP. Есть идеи? Спасибо. 20.07.2010
  • Нет необходимости конвертировать скрипт Guffa. Ответ JGB146 практически такой же. 20.07.2010

  • 4

    Цикл @Shubham - вполне адекватная техника.

    Вы можете нанять array_reduce(), если хотите:

    • избегать создания глобальной переменной или
    • хотите работать с возвращаемым значением или
    • обычно предпочитают функциональный стиль

    Оператор объединения null предотвращает создание любых предупреждений/ошибок при добавлении к еще не объявленным элементам в результирующем массиве.

    Код: (Демо)

    var_export(
        array_reduce(
            $array,
            function($carry, $row) {
                $carry[$row['name']] = ($carry[$row['name']] ?? 0) + $row['amount'];
                return $carry;
            }
        )
    );
    

    Выход:

    array (
      'Bank BRI' => 34534534,
      'Bank BCA' => 1435773657,
      'Bank CIMB Niaga' => 1338303418,
      'Bank BNI' => 124124,
      'Bank Mandiri' => 0,
      'Bank Permata' => 352352353,
    )
    
    15.04.2021

    5
    $a = arrayofindonesianbanks;
    
    foreach ($a as $anarrays) {
            echo "$anarrays[name]."  ".$anarrays[amount]";
        }
    }
    

    см. foreach в php.

    20.07.2010
  • Большое спасибо, я пытаюсь преобразовать алгоритм Guffa в PHP. но я все еще застрял/запутался. 20.07.2010
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..