【问题标题】:Count by grouping Multidimensional arrays in PHP [duplicate]通过在 PHP 中对多维数组进行分组来计数 [重复]
【发布时间】:2012-11-08 06:58:02
【问题描述】:

可能重复:
php how to group a multidimensional array by a particular value?
php group by SUM using multi dimensional array

我需要一些帮助来获取数组元素数量的计数,方法是根据 php 中多维数组的日期值部分对其进行分组

这是我原来的数组

Array
(
[0] => Array
    (
        [quantity] => 5
        [dd] => 01-Nov-2012
    )

[1] => Array
    (
        [quantity] => 10
        [dd] => 01-Nov-2012
    )

[2] => Array
    (
        [quantity] => 3
        [dd] => 02-Nov-2012
    )

[3] => Array
    (
        [quantity] => 4
        [dd] => 03-Nov-2012
    )

[3] => Array
    (
        [quantity] => 15
        [dd] => 03-Nov-2012
    )
)

这是我期待的输出

Array
(
[0] => Array
    (
        [quantity] => 15
        [dd] => 01-Nov-2012
    )

[1] => Array
    (
        [quantity] => 3
        [dd] => 02-Nov-2012
    )

[2] => Array
    (
        [quantity] => 19
        [dd] => 03-Nov-2012
    )
)

【问题讨论】:

标签: php count grouping


【解决方案1】:

只需遍历行,然后将数量相加到由dd 值索引的不同数组中。

$in = array(array()); // your input
$out = array();
foreach ($in as $row) {
    if (!isset($out[$row['dd']])) {
        $out[$row['dd']] = array(
            'dd' => $row['dd'],
            'quantity' => 0,
        );
    }
    $out[$row['dd']]['quantity'] += $row['quantity'];
}
$out = array_values($out); // make the out array numerically indexed
var_dump($out);

【讨论】:

    【解决方案2】:

    Orrrrr...因为日子是独一无二的:

      <?php
    
      header('Content-type: text/plain');
    
      $inputArray  = array(
        array('qty' => 5,  'dd'  => '01-Nov-2012'),
        array('qty' => 10, 'dd'  => '01-Nov-2012'),
        array('qty' => 3,  'dd'  => '02-Nov-2012'),
        array('qty' => 4,  'dd'  => '03-Nov-2012'),
        array('qty' => 15, 'dd'  => '03-Nov-2012'));
    
      $outputArray = array();
    
      foreach ( $inputArray as $record ) {
        if ( !key_exists($record['dd'], $outputArray) ) {
          $outputArray[$record['dd']] = 0;
        }
        $outputArray[$record['dd']] += $record['qty'];
      }
    
      print_r($outputArray);
    

    会产生:

    Array
    (
        [01-Nov-2012] => 15
        [02-Nov-2012] => 3
        [03-Nov-2012] => 19
    )
    

    【讨论】:

      猜你喜欢
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2018-04-25
      • 1970-01-01
      • 2012-04-23
      • 2019-07-05
      相关资源
      最近更新 更多