【问题标题】:Regroup and sum array in php在php中重新组合和求和数组
【发布时间】:2019-11-23 10:21:20
【问题描述】:

我从我的数据库中收集开始和结束日期。我使用函数来确定每天的值。

$array = array();
       foreach ($db_value as $key => $value) {

      $Variable1 = strtotime($Date1);
      $Variable2 = strtotime($Date2);

      for ($currentDate = $Variable1; $currentDate <= $Variable2;
                                      $currentDate += (86400)) {

      $Store = date('Y-m-d', $currentDate);
      $array[] = array( $Store,
       $value->Value2);
      }

      $result = array_merge($array);
    }

这给出了输出:

 0 => array:2 [▼
    0 => "2019-11-24"
    1 => "4"
  ]
  1 => array:2 [▼
    0 => "2019-11-24"
    1 => "10"
  ]

但是,我想以这样一种方式对数组进行整形,即每天获得第二个字段的总和而不会重复。喜欢:

 0 => array:2 [▼
    0 => "2019-11-24"
    1 => "14"
  ]

但是,我不能再进一步了。

【问题讨论】:

    标签: php arrays laravel


    【解决方案1】:

    您可以将日期设为键,如果日期相同,则求和索引1

    $result = [];
    foreach($array as $v){
        if(isset($result[$v[0]])){
            $result[$v[0]][1] += $v[1];
        }else{
            $result[$v[0]] = $v;
        }
    }
    $result = array_values($result);
    

    【讨论】:

      【解决方案2】:

      我不遵循您之前的逻辑,所以也许您可以在迭代数据库结果时进行求和,但考虑到您的输出:

      <?php
      
      $dates =
      [
          [
              '2009-11-24',
              2
          ],
          [
              '2009-11-24',
              5
          ]
      ];
      
      foreach($dates as $date) {
          $result[$date[0]][] = $date[1];
      }
      $result = array_map('array_sum', $result);
      $result = array_map(null, array_keys($result), $result);
      
      var_export($result);
      

      输出:

      array (
        0 => 
        array (
          0 => '2009-11-24',
          1 => 7,
        ),
      )
      

      第一个 foreach 产生这个结果:

      array(1) {
          ["2009-11-24"]=>
          array(2) {
            [0]=>
            int(2)
            [1]=>
            int(5)
          }
        }
      

      那么 array_map 和 array_sum 的结果是这样的:

        array(1) {
          ["2009-11-24"]=>
          int(7)
        }
      

      最后一个 array_map 重新调整为原始格式,一个数组数组,其中包含日期以及每个数组的第一个和第二个索引的总和值。

      【讨论】:

      • 这里略有不同,因为我使用的原始值是数组中的整数,而你的看起来是字符串。结果子数组也有整数值。如果你必须有字符串值,你可以用一个中间值来解决这个问题:$result = array_map('strval', $result);
      猜你喜欢
      • 2023-02-23
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多