我正在研究一种基于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
)
)
无论我尝试过什么,我都没有运气。特别是添加不包含任何变量的月份。
答案 0 :(得分: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
)
答案 1 :(得分: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);
答案 2 :(得分:0)
如果我理解得很好:
$A
,将每个元素设置为0
$v
计算$m
的月份$v['name']
,计算$v['values']
中的元素数量,并将该元素数量添加到{ {1}} $A[$m]
的内容如果那不是您所需要的,也许您需要举例说明预期输出与您的数组匹配。