我有一个2d数组,如下所示:
1月1日,10日 1月2日,20日 1月2日,15日 1月3日,20日 1月3日,10日 1月3日,5日
我需要创建一种扫描此数组的方法,并将类似日期的数字添加到新数组中,以便:
1月1日,10日 1月2日,35日 1月3日,35日
实现这一目标的最快方法是什么? 谢谢!
答案 0 :(得分:2)
试试这个
<?php
// array of monthdate structure
$monthdate = array();
$monthdate[] = array('date'=>'Jan 1','num'=>10);
$monthdate[] = array('date'=>'Jan 2','num'=>20);
$monthdate[] = array('date'=>'Jan 2','num'=>15);
$monthdate[] = array('date'=>'Jan 3','num'=>20);
$monthdate[] = array('date'=>'Jan 3','num'=>10);
// begin the iteration for grouping date and calculate the num
$sumofnum = array();
foreach($monthdate as $month) {
$index = month_exists($month['date'], $sumofnum);
if ($index < 0) {
$sumofnum[] = $month;
}
else {
$sumofnum[$index]['num'] += $month['num'];
}
}
print_r($sumofnum); //display
// for search if a monthdate has been added into $sumofnum, returns the key (index)
function month_exists($monthname, $array) {
$result = -1;
for($i=0; $i<sizeof($array); $i++) {
if ($array[$i]['date'] == $monthname) {
$result = $i;
break;
}
}
return $result;
}