这个问题与其他问题不重复。它是不同的,这是当前的代码,我试图基于相同的日期键值来对数组的值求和。
foreach ($TablesArr as $tr) {
$criteria = new CDbCriteria;
$criteria->select = 'date,mal';
$Arr1 = $tr::model()->findAll($criteria);
$array_1 = array();
foreach ($Arr1 as $a1) {
$array_1['date'] = $a1['date'];
$array_1['mal'] = $a1['mal'];
}
}
我的当前输出是:
Array
(
[date] => 2015-11-00
[mal] => 35
)
Array
(
[date] => 2015-12-00
[mal] => 20
)
Array
(
[date] => 2016-01-00
[mal] => 30
)
Array
(
[date] => 2016-01-00
[mal] => 10
)
Array
(
[date] => 2015-11-00
[mal] => 50
)
如果date
相同,则将数组中mal
的值相加。例如,在上面的数组中,日期2015-11-00
出现两次或两次以上(5或10次等),然后将该日期的所有值相加。目前它显示两次,因此对于2015-11-00
,mal
值将为35+50=85
。我希望我的输出如下所示:
Array
(
[date] => 2015-11-00
[mal] => 85
)
Array
(
[date] => 2015-12-00
[mal] => 20
)
Array
(
[date] => 2016-01-00
[mal] => 40
)
我试过了:
$result = array();
foreach($Arr1 as $data) {
$result[ $data['date'] ] += $data['mal'];
}
答案 0 :(得分:2)
您的$array_1
变量不包含原始$Arr1
数组中的所有值。每次循环都会覆盖相同的元素,因此它只包含$Arr1
中的最后一项。这些行:
$array_1['date'] = $a1['date'];
$array_1['mal'] = $a1['mal'];
应该是:
$array_1[] = array('date' => $a1['date'], 'mal' => $a1['mal']);
另一个问题是,每次通过外循环重置$array_1
。
您也可以使用array_merge
来组合数组,而不是循环:
$array_1 = array();
foreach ($TablesArr as $tr) {
$criteria = new CDbCriteria;
$criteria->select = 'date,mal';
$Arr1 = $tr::model()->findAll($criteria);
$array_1 = array_merge($array_1, $Arr1);
}
您可以使用php group by SUM using multi dimensional array中的一个解决方案创建一个关联数组,其中的总和按日期分组。您可以使用另一个循环将其转换为二维数组:
$newresult = array();
foreach ($result as $date => $mal) {
$newresult[] = array('date' => $date, 'mal' => $mal);
}