Php 如何计算行和列中的值之和?

Php 如何计算行和列中的值之和?,php,mysql,yii,Php,Mysql,Yii,我有一个价值表​​它由月份名称和总和数组填充。如何计算这些值的总和​​在行和列中,并在结果列的结果字符串中显示结果 public function getReport($year=false) { if (!empty($_GET['year'])) $year = (int)$_GET['year']; else $year = date ('Y'); $from_date = $year.'

我有一个价值表​​它由月份名称和总和数组填充。如何计算这些值的总和​​在行和列中,并在结果列的结果字符串中显示结果

public function getReport($year=false)
    {           
        if (!empty($_GET['year'])) $year = (int)$_GET['year'];
        else $year = date ('Y');           

        $from_date = $year.'-01-01 00:00:00';
        $to_date = $year.'-12-31 00:00:00';

        // собираем гигантский запрос
        $fields = 'all_months.fio, all_months.active_count AS sum_active_count, all_months.active_sum AS sum_active_sum';
        $joins = "";

        $months = array('jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'decem');
        $months_ru = array('Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь');

        // результирующий запрос
        $data = array();
        // блок итого
        $data['result'] = array();

        // ставим ограничение по месяцу, если год текущий

        if ($year == (int)date('Y')) $max_month = date('m')-1;
        else $max_month = 11;

        foreach ($months as $key => $m)
        {
            if ($key > $max_month) break;

            // заголовки колонок запроса
            $data['months'][] = $m;
            $data['months_ru'][] = $months_ru[$key];

            $k = sprintf('%02.0d', ($key + 1));
            $fields .= ', '."\n".$m.'.active_count as '.$m.'_active_count, '.$m.'.active_sum as '.$m.'_active_sum,
                          '."\n".$m.'.realized_count as '.$m.'_realized_count, '.$m.'.realized_sum as '.$m.'_realized_sum';
            $joins .=  "\n"."LEFT JOIN tbl_report ".$m." ON ".$m.".date > '".$year."-".$k."-01 00:00:00' AND 
                ".$m.".date < '".$year."-".$k."-31 24:59:59' AND 
                ".$m.".fio = all_months.fio ";
        }

        // поулчаем данные запроса
        $query = "SELECT DISTINCT ".$fields."
                  FROM tbl_report all_months
                  ".$joins."
                  WHERE all_months.date > '$from_date' AND all_months.date < '$to_date' GROUP BY fio";
    //echo '<!--'.$query.'-->';

        //$db_data = Report::model()->findAllBySql($query);
        $db_data = Yii::app()->db->createCommand($query)->queryAll();

        foreach ($db_data as $row)
        {
            $data['rows'][] = $row;
        }

        // Собираем отчет по суммам по месяцам
        $fields = ' SUM(all_months.active_count) as all_active_count, SUM(all_months.active_sum) as all_active_sum,
                    SUM(all_months.realized_count) as all_realized_count, SUM(all_months.realized_sum) as all_realized_sum ';


        $joins = '';
        foreach ($months as $key => $m)
        {
            if ($key > $max_month) break;

            $k = sprintf('%02.0d', ($key + 1));
            $fields .= ', '."\n SUM(".$m.'.active_count) as '.$m.'_active_count, SUM('.$m.'.active_sum) as '.$m.'_active_sum,
                          '."\n SUM(".$m.'.realized_count) as '.$m.'_realized_count, SUM('.$m.'.realized_sum) as '.$m.'_realized_sum';
            $joins .=  "\n"."LEFT JOIN tbl_report ".$m." ON ".$m.".date > '".$year."-".$k."-01 00:00:00' AND 
                ".$m.".date < '".$year."-".$k."-31 24:59:59' AND 
                ".$m.".fio = all_months.fio ";
        }

        $query = "SELECT DISTINCT ".$fields."
                  FROM tbl_report all_months
                  ".$joins."
                  WHERE all_months.date > '".$year."-01-01 00:00:00' AND all_months.date < '".$year."-12-31 24:59:59'";
        //echo $query;
        $data['summary'] = Yii::app()->db->createCommand($query)->queryRow();

        // форматируем числа
        if (!empty($data['rows']) && is_array($data['rows']))
        foreach ($data['rows'] as &$row)
            if (!empty($data['months']) && is_array($data['months']))
            foreach ($data['months'] as $month)
            {
                $row[$month.'_active_count'] = (int)$row[$month.'_active_count'];
                $row[$month.'_active_sum'] = FormatHelper::MF($row[$month.'_active_sum']);
                $row[$month.'_realized_count'] = (int) $row[$month.'_realized_count'];
                $row[$month.'_realized_sum'] = FormatHelper::MF($row[$month.'_realized_sum']);
            }

        // форматируем результирующие строки
        if (!empty($data['months']) && is_array($data['months']))
        foreach ($data['months'] as $month)
            {
                $data['summary'][$month.'_active_count'] = (int)$data['summary'][$month.'_active_count'];
                $data['summary'][$month.'_active_sum'] = FormatHelper::MF($data['summary'][$month.'_active_sum']);
                $data['summary'][$month.'_realized_count'] = (int) $data['summary'][$month.'_realized_count'];
                $data['summary'][$month.'_realized_sum'] = FormatHelper::MF($data['summary'][$month.'_realized_sum']);
            }

        // разворачиваем порядок месяцев в обратном направлении
        //$data['months'] = array_reverse($data['months']);
        //$data['months_ru'] = array_reverse($data['months_ru']);
        //print_r( $months_ru );
        return $data;
    }
公共函数getReport($year=false)
{           
如果(!empty($_GET['year']))$year=(int)$_GET['year'];
else$年=日期('Y');
$from_date=$year'-01-01 00:00:00';
$to_date=$year.-12-31 00:00:00';
// собираем гигантский запрос
$fields='all_months.fio,all_months.active_count AS sum_active_count,all_months.active_sum AS sum_active_sum';
$joins=“”;
$months=数组('1月'、'2月'、'3月'、'4月'、'5月'、'6月'、'7月'、'8月'、'9月'、'10月'、'11月'、'12月');
$monthsаru=数组('1071;ааааааа'、'Фаааааа'、'Маааа'、'Маааааааа'、';
// результирующий запрос
$data=array();
// блок итого
$data['result']=array();
// ставим ограничение по месяцу, если год текущий
如果($year==(int)date('Y'))$max_month=date('m')-1;
其他$max_月=11;
foreach(月份为$key=>m美元)
{
如果($key>$max_月)中断;
// заголовки колонок запроса
$data['months'][]=$m;
$data['months\u ru'][]=$months\u ru[$key];
$k=sprintf('%02.0d',($key+1));
$fields.=','.“\n'$m.$m.$m.$m.$m.$m.$m.$m.$m.$m.$m.$m.$m.',
“。”\n“$m.”实收金额为“$m.”实收金额为“$m.”实收金额为“$m.”实收金额为“$m.”;
$joins.=“\n.”左连接tbl_报告“$m.”在“$m.”日期>“$year.”-“$k.”-01 00:00:00”和
“$m.”日期<“$year.”-“$k.”-31 24:59:59”和
“$m.”.fio=所有月份.fio”;
}
// поулчаем данные запроса
$query=“选择不同的“$fields”
从tbl_报告所有_月
“$joins。”
其中,所有月日期>“$from月日期”和所有月日期<“$to月日期”按fio分组;
//回声';
//$db_data=Report::model()->findAllBySql($query);
$db_data=Yii::app()->db->createCommand($query)->queryal();
foreach($db_数据作为$row)
{
$data['rows'][]=$row;
}
// Собираем отчет по суммам по месяцам
$fields='SUM(all_months.active_count)作为all_active_count,SUM(all_months.active_SUM)作为all_active_SUM,
SUM(所有月.已实现月数)为所有月已实现月数,SUM(所有月.已实现月数)为所有月已实现月数;
$joins='';
foreach(月份为$key=>m美元)
{
如果($key>$max_月)中断;
$k=sprintf('%02.0d',($key+1));
$fields.='','.“\n求和(“$m..活动\u计数)为'$m.'活动\u计数,求和('$m..活动\u计数)为'$m.'活动\u计数,
“。”\n求和(“$m.已实现”计数)为“$m.已实现”计数,求和(“$m.已实现”计数)为“$m.已实现”计数;
$joins.=“\n.”左连接tbl_报告“$m.”在“$m.”日期>“$year.”-“$k.”-01 00:00:00”和
“$m.”日期<“$year.”-“$k.”-31 24:59:59”和
“$m.”.fio=所有月份.fio”;
}
$query=“选择不同的“$fields”
从tbl_报告所有_月
“$joins。”
其中所有的月份日期>“$year.”-01-01 00:00:00”和所有的月份日期<“$year.”-12-31 24:59:59”;
//echo$query;
$data['summary']=Yii::app()->db->createCommand($query)->queryRow();
// форматируем числа
if(!empty($data['rows'])和&is_数组($data['rows']))
foreach($data['rows']as&$row)
if(!empty($data['months'])和&is_数组($data['months']))
foreach($data['months']作为$month)
{
$row[$MOUNT.''活动计数']=(int)$row[$MOUNT.''活动计数'];
$row[$MOUNT.''活动金额']=FormatHelper::MF($row[$MOUNT.''活动金额']);
$row[$MOUNT.''已实现计数']=(int)$row[$MOUNT.''已实现计数'];
$row[$MOUNT.''已实现金额']=FormatHelper::MF($row[$MOUNT.''已实现金额']);
}
// форматируем результирующие строки
if(!empty($data['months'])和&is_数组($data['months']))
foreach($data['months']作为$month)
{
$data['summary'][$MOUNT.''活动计数']=(int)$data['summary'][$MOUNT.''活动计数'];
$data['summary'][$month.''u active\u sum']=FormatHelper::MF($data['summary'][$month.''u active\u sum']);
$data['summary'][$MOUNT.''已实现计数']=(int)$data['summary'][$MOUNT.''已实现计数'];
$data['summary'][$month.''u realized\u sum']=FormatHelper::MF($data['summary'][$month.''u realized\u sum']);
}
// разворачиваем порядок месяцев в обратном направлении
//$data['months']=array_reverse($data['months']);
//$data['months\u ru']=array\u reverse($data['months\u ru']);
//打印(月);
返回$data;
}
点击以下链接:

这段代码将转到您的视图文件

'columns'=>array(
                ..........
                array(
                        'name'=>'age',
                        'footer'=>'Total: ' . $model->getTotal($model->search()->getData(), 'age'),
                ),
                array(
                        'name'=>'weight',
                        'footer'=>'Total: ' . $model->getTotal($model->search()->getData(), 'weight'),
                ),
                ..........
        ),
这一个转到你的模型文件

 public function getTotal($records, $column)
        {
                $total = 0;
                foreach ($records as $record) {
                        $total += $record->$column;
                }
                return $total;
        }