【问题标题】:How to find the sum of an associative array如何找到关联数组的总和
【发布时间】:2016-06-02 06:05:11
【问题描述】:

我有一个这样的数组

$sales = array('FIRST'=>array('RED'=>array(9,3),'GREEN'=>array(4,5,8,2)), 
'SECOND'=>array('RED'=>array(3,5,5,2),'YELLOW'=>array(4,2,5)),
'THIRD'=>array('BLUE'=>array(1,2,4),'RED'=>array(9,4,6)), 
'FOUR'=>array('BLUE'=>array(2,3,3,5),'BLACK'=>array(4,5,8,9)));

我必须找到数组中每种颜色的总销售额。

结果数组应该是这样的

Array('RED'=>46,'GREEN'=>19, ...)

【问题讨论】:

    标签: php arrays associative-array


    【解决方案1】:

    这是使用array_walkkey_existsarray_sum 函数的简短解决方案:

    $total = [];
    array_walk($sales, function($v) use(&$total){
        foreach ($v as $k => $arr) {
            $total[$k] = (key_exists($k, $total))? $total[$k] + array_sum($arr) : array_sum($arr);
        }
    });
    
    print_r($total);
    

    输出:

    Array
    (
        [RED] => 46
        [GREEN] => 19
        [YELLOW] => 11
        [BLUE] => 20
        [BLACK] => 26
    )
    

    【讨论】:

    • 我为array_walk +1。我试过了,但为了清楚起见,我更喜欢foreach
    【解决方案2】:

    在 foreach 中使用 array_sum

    $sales = array('FIRST'=>array('RED'=>array(9,3),'GREEN'=>array(4,5,8,2)), 
    'SECOND'=>array('RED'=>array(3,5,5,2),'YELLOW'=>array(4,2,5)),
    'THIRD'=>array('BLUE'=>array(1,2,4),'RED'=>array(9,4,6)), 
    'FOUR'=>array('BLUE'=>array(2,3,3,5),'BLACK'=>array(4,5,8,9)));
    
    $arr = [];
    
    foreach ($sales as $value) {
        foreach ($value as $key => $val) {
            if(array_key_exists($key, $arr)){
                $arr[$key] += array_sum($val);
            } else {
                $arr[$key] = array_sum($val);
            }
        }
    }
    
    print_r($arr);
    

    结果:

    Array
    (
        [RED] => 46
        [GREEN] => 19
        [YELLOW] => 11
        [BLUE] => 20
        [BLACK] => 26
    )
    

    Demo

    【讨论】:

      【解决方案3】:

      试试这个:

      $val = array();
      foreach($sales as $values){
          foreach($values as $k => $v){
              $val[$k] = (array_key_exists($k, $val)) ? $val[$k] + array_sum($v) : array_sum($v);
          }
      }
      

      输出:

      Array
      (
          [RED] => 46
          [GREEN] => 19
          [YELLOW] => 11
          [BLUE] => 20
          [BLACK] => 26
      )
      

      【讨论】:

        【解决方案4】:

        这是一个示例算法:

        1. 在主阵列上使用foreach
        2. 在二级数组上使用foreach
        3. 检查目标数组中是否存在单色键
        4. 如果是,请执行array_sum 并将其添加到现有值中
        5. 如果没有,请将新键及其总和添加到目标数组中

        【讨论】:

          【解决方案5】:

          你可以这样做

          $tsales = array();
          foreach ($sales as $key => $value) {
            foreach ($value as $key => $val) {
              $tsales[$key] += array_sum($val);
            }
          }
          echo '<pre>';
          print_r($tsales);
          echo '</pre>';
          

          【讨论】:

          • 开启报错会得到Notice:undefined index
          • 如何隐藏该通知?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-11
          • 2021-12-16
          • 2010-11-16
          • 1970-01-01
          • 2020-10-05
          • 2016-07-07
          相关资源
          最近更新 更多