【问题标题】:PHP group and sum multidimensional array [closed]PHP组和求和多维数组[关闭]
【发布时间】:2021-04-14 15:07:35
【问题描述】:

编辑:我不知道为什么关闭。我创建了一个解决方案,并将其作为答案提出(我认为它可能对其他人有帮助)。现在它关闭了。如果我的答案是错误的,那么如果有人解释出了什么问题,那将对我有所帮助。谢谢。

我喜欢对一个多维数组进行分组并像这样对一个元素求和(同一类型中的颜色总是相同的):

 $arr = [
        ['type' => 'x', 'color' => 'red', 'amount => 100'],
        ['type' => 'x', 'color' => 'red', 'amount => 100'],
        ['type' => 'y', 'color' => 'blue', 'amount => 50']
    ];
   

结果:

$arr_res = [
        ['type' => 'x', 'color' => 'red', 'amount => 200'],
        ['type' => 'y', 'color' => 'blue', 'amount => 50']
    ];

【问题讨论】:

  • 你试过什么?你有什么问题?
  • 这是一个简单的任务,可以通过一个简单的循环来完成。你试过什么吗?如果是这样,请分享你的努力并解释它在哪里以及如何未能达到你想要的效果。
  • 参见。 how to group & how to sum 处理多维数组时。另请参阅stackoverflow.com/search

标签: php arrays multidimensional-array


【解决方案1】:

这是一种获得所需结果的方法。我试图发挥创造力(我认为这不是最直接的方式,也许也不是最好的方式)。

输入数组 ($arr) 中每个内部数组的最后一个元素是一个字符串(没有关联键),我不知道您在输入单引号时犯了错误,或者这是您的意图。我把它们当作键值对。

代码:

我将原始数组(和结果数组)分成两个数组,一个包含要查找的数组,另一个包含数量数组。如果我在结果数组中找到查找数组,我将两个数量相加。最后我合并了两个结果数组。

<?php

//Input data:
$array = [
        ['type' => 'x', 'color' => 'red', 'amount' => 100],
        ['type' => 'x', 'color' => 'red', 'amount' => 100],
        ['type' => 'y', 'color' => 'blue', 'amount' => 50]
    ];

$arrayResultSearch = array();
$arrayResultAmount = array();

foreach($array as $elemnt) {
    list($arrayTypeColor, $arrayAmount) = array_chunk($elemnt, 2, true);

    if(! in_array($arrayTypeColor, $arrayResultSearch)) {
        $arrayResultSearch[] = $arrayTypeColor;
        $arrayResultAmount[] = $arrayAmount;
    } else {
        $key = key($arrayAmount);
        $value = current($arrayAmount);

        $arrayResultAmount[array_search($arrayTypeColor, $arrayResultSearch)][$key] += $value;
    }
}

$arrrayResult = array_map(function($a, $b) { return array_merge($a, $b); }, $arrayResultSearch, $arrayResultAmount);

?>

结果($arrayResult):

array ( 0 => array ( 'type' => 'x', 'color' => 'red', 'amount' => 200, ), 1 => array ( 'type' => 'y', 'color' => 'blue', 'amount' => 50, ), )

【讨论】:

    【解决方案2】:

    我是这样解决的:

    $arr = [
            ['type' => 'x', 'color' => 'red', 'amount' => 100],
            ['type' => 'x', 'color' => 'red', 'amount' => 100],
            ['type' => 'y', 'color' => 'blue', 'amount' => 50]
        ];
        // Create an array with unique types
        $types = [];
        foreach ($arr as $a) {
           if(!in_array($a['type'], $types))
               $types[] = $a['type'];
        }
        // Loop through that array and sum amount of all equal types
        #$x = [];
        $i = 0;
        foreach ($types as $type) {
            $x[$i]['amount'] = 0;
            foreach ($arr as $a) {
                if($type == $a['type']){ // we have a matching type (x or y)
                    $x[$i]['type'] = $a['type'];
                    $x[$i]['color'] = $a['color'];
                    $x[$i]['amount'] += $a['amount'];
                }
            }
            $i += 1;
        }
    

    转储:

    array (
      0 => 
      array (
        'amount' => 200,
        'type' => 'x',
        'color' => 'red',
      ),
      1 => 
      array (
        'amount' => 50,
        'type' => 'y',
        'color' => 'blue',
      ),
    )
    

    【讨论】:

      猜你喜欢
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      相关资源
      最近更新 更多