【问题标题】:PHP - sum one or more values with the same keyPHP - 用相同的键对一个或多个值求和
【发布时间】:2022-08-18 20:12:55
【问题描述】:

对于每种不同的颜色,用相同的 \'color\' 对 \'val\',\'val1\',\'val2\' 字段求和的最佳方法是什么:

我有以下数组格式。如果颜色具有相同的值,则在该数组中添加键值。请帮帮我。提前致谢

Array
(
    [0] => Array
        (
            [color]=> \"red\"
            [val]=> 4
            [val1]=> 4
            [val2]=> 4
        )    
    [1] => Array
        (
            [color]=> \"green\"
            [val]=> 3
            [val1]=> 3
            [val2]=> 3
        )    
    [2] => Array
        (
            [color]=> \"blue\"
            [val]=> 1
            [val1]=> 3
            [val2]=> 3
        )    
    [3] => Array
        (
            [color]=> \"green\"
            [val]=> 6
            [val1]=> 3
            [val2]=> 3
        )    
    [4] => Array
        (
            [color]=> \"blue\"
            [val]=> 2
            [val1]=> 3
            [val2]=> 3
        )
)

我想要的结果:

 (
        [color] => red
        [val] => 4
        [val1] => 4
        [val2] => 4
        
    )
    (
        [color] => green
        [val] => 9
        [val1] => 6
        [val2] => 6
        
    )
    (
        [color] => blue
        [val] => 3
        [val1] => 6
        [val2] => 6
        
    )

    标签: php arrays


    【解决方案1】:

    遍历数组并使用颜色作为键。

    $array = [
        [
            'color' => "red",
            'val'   => 4,
            'val1'  => 4,
            'val2'  => 4,
        ],
        [
            'color' => "green",
            'val'   => 3,
            'val1'  => 3,
            'val2'  => 3,
        ],
        [
            'color' => "blue",
            'val'   => 1,
            'val1'  => 3,
            'val2'  => 3,
        ],
        [
            'color' => "green",
            'val'   => 6,
            'val1'  => 3,
            'val2'  => 3,
        ],
        [
            'color' => "blue",
            'val'   => 2,
            'val1'  => 3,
            'val2'  => 3,
        ],
    ];
    
    $colors = [];
    foreach ($array as $item) {
        foreach (['val', 'val1', 'val2'] as $key) {
            $colors[$item['color']][$key] = ($colors[$item['color']][$key] ?? 0) + $item[$key];
        }
    }
    
    print_r($colors);
    

    将导致

    Array
    (
        [red] => Array
            (
                [val] => 4
                [val1] => 4
                [val2] => 4
            )
    
        [green] => Array
            (
                [val] => 9
                [val1] => 6
                [val2] => 6
            )
    
        [blue] => Array
            (
                [val] => 3
                [val1] => 6
                [val2] => 6
            )
    
    )
    

    【讨论】:

      【解决方案2】:

      您可以使用Foreach 循环来实现,并在循环内进行加法计算。

      $baseArray = [
          [
              'color' => "red",
              'val'   => 4,
              'val1'  => 4,
              'val2'  => 4,
          ],
          [
              'color' => "green",
              'val'   => 3,
              'val1'  => 3,
              'val2'  => 3,
          ],
          [
              'color' => "blue",
              'val'   => 1,
              'val1'  => 3,
              'val2'  => 3,
          ],
          [
              'color' => "green",
              'val'   => 6,
              'val1'  => 3,
              'val2'  => 3,
          ],
          [
              'color' => "blue",
              'val'   => 2,
              'val1'  => 3,
              'val2'  => 3,
          ],
      ];
      
      $colorsArray = [];
      $arrayKeys = ['val', 'val1', 'val2'];
      
      foreach ($baseArray as $item) {
          foreach ($arrayKeys as $keyName) {
              $colorsArray[$item['color']]['color'] = $item['color'];
              $colorsArray[$item['color']][$keyName] = ($colorsArray[$item['color']][$keyName] ?? 0) + $item[$keyName];
          }
      }
      
      $colorsArray = array_values($colorsArray);
      
      print_r($colorsArray);
      

      输出:

      Array
      (
          [0] => Array
              (
                  [color] => red
                  [val] => 4
                  [val1] => 4
                  [val2] => 4
              )
      
          [1] => Array
              (
                  [color] => green
                  [val] => 9
                  [val1] => 6
                  [val2] => 6
              )
      
          [2] => Array
              (
                  [color] => blue
                  [val] => 3
                  [val1] => 6
                  [val2] => 6
              )
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-08
        • 2018-03-15
        • 2020-07-08
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 2015-05-06
        相关资源
        最近更新 更多