2010-03-14 48 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 
) 
相關問題