【问题标题】:Php multidimensional array filter and sumphp多维数组过滤和求和
【发布时间】:2021-07-14 22:14:15
【问题描述】:

我有一个像这样的多维数组:

['2021-04-01'=>
      ['hb' => 35, 'fb' => 40, 'ai' => 50],
'2021-04-02'=>
      ['hb' => 35, 'fb' => 40, 'ai' => 50],
'2021-04-03'=>
      ['hb' => 40, 'ai' => 55],
'2021-04-04'=>
      ['hb' => 40, 'fb' => 45, 'ai' => 55],
'2021-04-05'=>
      ['hb' => 35, 'ai' => 50]]

我想收到这样一个数组:

['hb'=>185,'ai'=>260]

基本上,我必须总结每次治疗的价格(hb=半食宿,fb=全食宿,ai=全包)仅当治疗存在于数组的每个元素中。

【问题讨论】:

标签: php arrays multidimensional-array array-intersect


【解决方案1】:

array_reduce() 的简短解决方案。

$sum = array_reduce($arr ,function($carry,$val){
    return ['hb'=>$carry['hb']+$val['hb'],'ai'=>$carry['ai']+$val['ai']];
  },
  ['hb'=>0,'ai'=>0]
);

$arr 是你的输入数组,$sum 结果。

array_reduce 所做的更容易理解的是带有 foreach 的简单循环。

$sum = ['hb' => 0, 'ai' => 0];
foreach($arr as $row){
  $sum['hb'] += $row['hb'];
  $sum['ai'] += $row['ai'];
}

【讨论】:

    【解决方案2】:

    基本上,foreach 循环可能是最好的选择。虽然你可以在array_map 之后使用array_sum 函数。 foreach 的示例:

    $ret = []
    foreach ($input_array as $second_array) {
         foreach ($second_array as $key => $value) {
             if (!isset($ret[$key]))
                  $ret[$key] = 0;
             $ret[$key] += $value
         }
    }     
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 2018-07-07
      • 2019-11-20
      • 1970-01-01
      相关资源
      最近更新 更多