【问题标题】:Sum an array in php by column按列对php中的数组求和
【发布时间】:2019-08-10 06:01:31
【问题描述】:

我有这个数组:

$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
   ]
]

我想得到一个数组:

$new_array = [
    0 => [
        name    => 'Solution',
        value1  => 50   // sum of array with key = 0 and key = 1
        value2  => 52
    ], 
    1 => [
        name    => 'Name1'
        value1  => 20,
        value2  => 21
    ],
    2 => [
        name    => 'Name2',
        value1  => 30,
        value2  => 31
    ],
    3 => [
        name    => 'Solution1',
        value1  => 40,
        value2  => 41
    ],
    4 => [
        name    => 'Name3',
        value1  => 40,
        value2  => 41
    ]
]

我试过这样:

private function groupByProductSuperCategory($datas)
{
    $return = [];
    foreach ($datas as $data) {
        $return[$data['category']][$data['name']] = array_sum(array_column('category', $data);
    }
    return $return;
}

这个想法是首先按类别计算所有总和值,然后像另一个数组一样放入名称中的值。你知道怎么做吗?请帮帮我。

【问题讨论】:

  • 您的输出似乎没有很好的结构。也许将它们放在一个不同的数组中,从而为您提供总和详细信息?
  • 此数据是否源自 SQL 数据库?如果是这样,您可能最好编写一个 SQL 查询来为您提供数据的 SUM,然后改用它。

标签: php arrays php-7


【解决方案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
  ]
];

现在,数据的重新组织比看起来要复杂一些...您需要执行几个循环来:

  • 查找不同的“类别”名称
  • 对每个执行求和
  • 加总项和单项

所以这是我结束的代码:

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] 运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2015-02-23
    • 2021-02-28
    相关资源
    最近更新 更多