Суммируйте массив в php по столбцам

Лично я принял странность API календаря Java как признак того, что мне нужно было отвлечься от григорианского мышления и попытаться более агрессивно программировать в этом отношении. В частности, я снова научился избегать жестко закодированных констант для таких вещей, как месяцы.

Какое из следующего, скорее всего, будет правильным?

if (date.getMonth() == 3) out.print("March");

if (date.getMonth() == Calendar.MARCH) out.print("March");

Это иллюстрирует одну вещь, которая раздражает меня немного о Joda Time - это может побудить программистов думать в терминах жестко закодированных констант. (Только немного, но это не так, как если бы Joda заставлял программистов плохо программировать.)

1
задан HareaCostea 19 March 2019 в 16:32
поделиться

1 ответ

Из размещенного массива ... Чтобы закончить в нужном массиве, сначала нужно сделать несколько мелких исправлений. Но я предположил, что это произошло из-за опечаток при копировании здесь ...

Итак, вот массив, с которого я начал:

$result = [
  0 => [
    "category"   => 'Solution',
    "name"       => 'Name1',
    "value1"     => 20,
    "value2"     => 21
  ],
  1 => [
    "category"   => 'Solution',
    "name"       => 'Name2',
    "value1"     => 30,
    "value2"     => 31
  ],
  2 => [
    "category"   => 'Solution1',
    "name"       => 'Name3',
    "value1"     => 40,
    "value2"     => 41
  ]
];

Теперь эта реорганизация данных немного сложнее, чем кажется ... Вам нужно выполнить несколько циклов: [ 118]

  • Найти отдельные имена "категорий"
  • Выполнить суммирование для каждого
  • Добавить элемент суммы и отдельные элементы

Так что здесь это код, которым я закончил:

function groupByProductSuperCategory($datas){
  $category = [];
  $return = [];

  // Find distinct categories
  foreach ($datas as $data) {
    if(!in_array($data["category"],$category)){
      array_push($category,$data["category"]);
    }
  }

  // For each distinct category, add the sum item and the single items
  foreach ($category as $cat) {

    // Get the sums
    if(!in_array($cat,$return)){

      $sum1 = 0;
      $sum2 = 0;
      foreach ($datas as $data) {
        if($data["category"] == $cat){
          $sum1 += $data["value1"];
          $sum2 += $data["value2"];
        }
      }
    }

    // Push the sums in the return array
    array_push($return,[
      "name" => $cat,
      "value1" => $sum1,
      "value2" => $sum2,
    ]);

    // Push the single elements
    foreach ($datas as $data) {
      if($cat == $data["category"]){
        array_push($return,[
          "name" => $data["name"],
          "value1" => $data["value1"],
          "value2" => $data["value2"],
        ]);
      }
    }


  }

  return $return;

}

Вот PHPFiddle , чтобы попробовать его ... Нажмите [F9] для запуска.

0
ответ дан Louys Patrice Bessette 19 March 2019 в 16:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: