问题:ThinkPHP5 做了一个统计,需要根据来源表($source)中的数据,查另外一个表中的数据,每一个来源对应的数据都要单独处理。来源表中有13条数据,我挨个取出来id对应着查询,写了好多代码。突发奇想,我能不能把ID拼接到变量名上使用,条件变量名都可以对应起来,然后自己就可以不用搬砖了!查了查可行,具体实现代码如下:
$source = $source_mod->field('id')->order('sort desc')->select();//查询来源表中的自己需要的参数
foreach ($source as $value){
$soure_id = $value['id'];//获取单个参数处理
$arrData{$soure_id} = [];//拼接变量名
$lastYearNums{$soure_id} = $statistics_mod
->field(['CONCAT(year,"-",month)' =>'yearmonth','total'])
->where('source='.$soure_id.' and (year>'.$yearStart.' or (year='.$yearStart.' and month>'.$monthStart.'))')
->order('year asc,month asc')
->select();
foreach ($lastYearNums{$soure_id} as $key => $itemNums){
array_push($arrData{$soure_id},$itemNums['total']);
}
$monthStartTime = strtotime(date('Y-m-01'));
$monthEndTime = strtotime(date('Y-m-01').' +1 month');
//本月提交数量
$monthNums{$soure_id} = $bl_mod
->field('count("id") as totalnum')
->where('source',$soure_id)
->whereTime('create_time', 'between', [$monthStartTime, $monthEndTime])
->find();
array_push($arrData{$soure_id},$monthNums{$soure_id}['totalnum']);
$this->assign('echartsData'.$soure_id, implode(",",$arrData{$soure_id}));
}