首页 > 解决方案 > 如何对具有按类别排序的相同键的数组的值求和?

问题描述

category

array:3 [▼
  "78f895684c" => "blue"
  "f71db561ba" => "green"
  "3e231651de" => "blue"
]

numbersGroup:

array:3 [▼
  0 => array:4 [▼
    "uuid" => "78f895684c"
    "price" => "10"
    "discount" => "0"
    "total" => "10.00"
  ]
  1 => array:4 [▼
    "uuid" => "f71db561ba"
    "price" => "2"
    "discount" => "0"
    "total" => "2.00"
  ]
  2 => array:4 [▼
    "uuid" => "3e231651de"
    "price" => "50"
    "discount" => "10"
    "total" => "40.00"
  ]
]

我尝试创建一个数组,将我的项目分类,但也将一个类别中的所有项目加在一起。这就是我所拥有的:

  foreach ($numbersGroup as $group) {
      $cat = $category[$group['uuid']];
      unset($group['uuid']);
      $numbersArray[$cat][] = $group;
    }

结果:

array:2 [▼
  "blue" => array:2 [▼
    0 => array:3 [▼
      "price" => "10"
      "discount" => "0"
      "total" => "10.00"
    ]
    1 => array:3 [▼
      "price" => "50"
      "discount" => "10"
      "total" => "40.00"
    ]
  ]
  "green" => array:1 [▼
    0 => array:3 [▼
      "price" => "2"
      "discount" => "0"
      "total" => "2.00"
    ]
  ]
]

这就是我想要实现的目标:

 array:2 [▼
      "blue" => array:2 [▼
        0 => array:3 [▼
          "price" => "60"
          "discount" => "10"
          "total" => "50.00"
        ]
      ]
      "green" => array:1 [▼
        0 => array:3 [▼
          "price" => "2"
          "discount" => "0"
          "total" => "2.00"
        ]
      ]
    ]

这是我的方法:

foreach ($numbersGroup as $group) {
  $cat = $category[$group['uuid']];
  unset($group['uuid']);
  foreach ($group as $key => $value) {
    $sum += $value;
  }
  $numbersArray[$cat][] = $sum;
}

但我得到了错误:

不支持的操作数类型

标签: phparrayssumkey

解决方案


你可以试试下面的代码

foreach ($numbersGroup as $group) {
  $cat = $category[$group['uuid']];
  if(!isset( $numbersArray[$cat][0]) )
    $numbersArray[$cat][] = $group;
  else{
     // If index is known, you can use below code
    /*$numbersArray[$cat][0]["price"]+=  $group['price'];
    $numbersArray[$cat][0]["discount"]+=  $group['discount'];
    $numbersArray[$cat][0]["total"]+=  $group['total'];*/


    // If index is not known
    foreach($group as $key => $value){
        if (is_numeric($value)) {
            $numbersArray[$cat][0][$key]+=  $group[$key];
        }
    }


  }     
}

现在我添加了数组索引未知的情况。在添加值之前,我们需要进行数字检查。我希望这可以帮助你 :)


推荐阅读