2010-03-14 28 views
0

我正在寻找一种基于PHP数组的内容在特定月份内创建事务摘要的方法。将包含日期的PHP数组过滤为年度摘要

预期结果(原谅布局):根据我的阵列上

------------------------------------------- 
| December 2009 |   12   | 
| January 2010 |   02   | 
| February 2010 |   47   | 
| March 2010 |   108  | 
| April 2010 |   499  | 
------------------------------------------- 

Array 
(
    [0] => Array 
     (
      [name] => 2009-10-23 
      [values] => Array 
       (
        [0] => INzY2MTI4ZWM4OGRm 
       ) 

     ) 

    [1] => Array 
     (
      [name] => 2009-10-26 
      [values] => Array 
       (
        [0] => IYmIzOWNmMmU3OWQz 
       ) 

     ) 

    [2] => Array 
     (
      [name] => 2009-11-23 
      [values] => Array 
       (
        [0] => INTg4YzgxYWU1ODkx 
        [1] => IMjhkNDZkY2FjNDhl 
       ) 

     ) 

    [3] => Array 
     (
      [name] => 2009-11-24 
      [values] => Array 
       (
        [0] => INTg4YzgxYWU1ODkx 
        [1] => INTg4YzgxYWU1ODkx 
       ) 

     ) 

    [4] => Array 
     (
      [name] => 2009-12-01 
      [values] => Array 
       (
        [0] => IMWFiODk5ZjU1OTFk 
       ) 

     ) 

我绝对没有运气不管我试过。特别是添加不包含任何变量的月份。

回答

2

这是reducing典型情况下,数据阵列成你想要的总结。

$data = array(
    array('name' => '2009-10-23', 'values' => array('INzY2MTI4ZWM4OGRm')), 
    array('name' => '2009-10-26', 'values' => array('IYmIzOWNmMmU3OWQz')), 
    array('name' => '2009-11-23', 'values' => array('INTg4YzgxYWU1ODkx', 'IMjhkNDZkY2FjNDhl')), 
    array('name' => '2009-11-24', 'values' => array('INTg4YzgxYWU1ODkx', 'INTg4YzgxYWU1ODkx')), 
    array('name' => '2009-12-01', 'values' => array('IMWFiODk5ZjU1OTFk')) 
); 

function count_by_month($reduced, $current) { 
    $month = date('F Y', strtotime($current['name'])); 

    if (! isset($reduced[$month])) { 
     $reduced[$month] = 0; 
    } 

    $reduced[$month] += count($current['values']); 

    return $reduced; 
} 

// Take the data array and return an array of 
// month (key) and transaction count for that month (value) 
$counts = array_reduce($data, 'count_by_month'); 

print_r($counts); 
0

如果我理解以及:

  1. 初始化一个数组$A与12种元素,在你的阵列和用于每个值$v计算一个月$m$v['name']每个元素设定为0
  2. 循环,计算数的元素$v['values'],并将该元素的数量添加到$A[$m]
  3. 用合适的格式打印$A的内容

如果这不是你所需要的,也许你需要给出一个预期输出与你的阵列相匹配的例子。

2
$summary = array(); 
foreach($transactions as $t) 
{ 
    $month = substr($t['name'], 0, 7); 
    if(!isset($summary[$month])) 
     $summary[$month] = 0; 

    if(isset($t['values'])) 
     $summary[$month] += count($t['values']); 
} 

将导致:

Array 
(
    [2009-10] => 2 
    [2009-11] => 4 
    [2009-12] => 1 
) 
相关问题