如何将如下重复的代码进行优化处理? 是不是要写一个函数,然后在必要的地方调用? if(count($s_dept))
{
foreach($s_dept AS $k=>$dept_seq)
{
$user_seqs = array();
$um = Cl::get('UserManager');
$um['page'] = 1;
$um['listsize'] = 500;
$um['where'] = array("fk_dept_seq=".$dept_seq);
$um->load();
if($um['total'] > 0)
{
foreach($um['lists'] AS $list)
{
array_push($user_seqs, $list['user_seq']);
}
}

$lm = Cl::get('LunchManager');
$lm['page'] = 1;
$lm['listsize'] = 1000;
$where = array('lunch_date=\''.$date.'\'');
if(count($user_seqs) > 0)
{
array_push($where, 'fk_user_seq IN('.implode(',',$user_seqs).')');
}
$lm['where'] = $where;
$lm['order'] = array('user_login_id ASC');
$lm->load();
if($lm['total'] > 0)
{
foreach($lm['lists'] AS $list)
{
$data[$k][$list['lunch_type_name']]['total'] += 1;
$data[$k][$list['lunch_type_name']]['lists'][] = array( 'lunch_seq'  => $list['lunch_seq'],
'fk_user_seq'  => $list['fk_user_seq'],
'lunch_date'  => $list['lunch_date'],
'lunch_type'  => $list['lunch_type'],
'lunch_closed'  => $list['lunch_closed'],
'lunch_insert_time' => $list['lunch_insert_time'] > 0 ? date('Y-m-d') : '-',
'user_login_id'  => $list['user_login_id'],
'user_name'  => $list['user_name'],
'lunch_check_time'  => $list['lunch_check_time'] > 0 ? date('Y-m-d H:i:s',$list['lunch_check_time']) : '-',
);
}
}
}
}
else
{
$user_seqs = array();
$um = Cl::get('UserManager');
$um['page'] = 1;
$um['listsize'] = 500;
$um->load();
if($um['total'] > 0)
{
foreach($um['lists'] AS $list)
{
array_push($user_seqs, $list['user_seq']);
}
}

$lm = Cl::get('LunchManager');
$lm['page'] = 1;
$lm['listsize'] = 1000;
$where = array('lunch_date=\''.$date.'\'');
if(count($user_seqs) > 0)
{
array_push($where, 'fk_user_seq IN('.implode(',',$user_seqs).')');
}
$lm['where'] = $where;
$lm['order'] = array('user_login_id ASC');
$lm->load();
if($lm['total'] > 0)
{
foreach($lm['lists'] AS $list)
{
$data['所有部门'][$list['lunch_type_name']]['total'] += 1;
$data['所有部门'][$list['lunch_type_name']]['lists'][] = array( 'lunch_seq'  => $list['lunch_seq'],
'fk_user_seq'  => $list['fk_user_seq'],
'lunch_date'  => $list['lunch_date'],
'lunch_type'  => $list['lunch_type'],
'lunch_type_name'  => $list['lunch_type_name'],
'lunch_closed'  => $list['lunch_closed'],
'lunch_insert_time' => $list['lunch_insert_time'] > 0 ? date('Y-m-d') : '-',
'user_login_id'  => $list['user_login_id'],
'user_name'  => $list['user_name'],
'lunch_check_time'  => $list['lunch_check_time'] > 0 ? date('Y-m-d H:i:s',$list['lunch_check_time']) : '-',
);
}
}
}

解决方案 »

  1.   

    改成这样满意吗?<?php
    if(count($s_dept))
    {
    foreach($s_dept AS $key=>$dept_seq)
    {
    $user_seqs = getUserSeqs($dept_seq);
    $newData = getUserLunchData($date, $user_seqs);
    $data = mergeLunchData($key,$data,$newData);
    }
    }
    else
    {
    $user_seqs = getUserSeqs();
    $newData = getUserLunchData($date, $user_seqs);
    $data = mergeLunchData('all',$data,$newData);
    }function loadList($name,$params){
    $um = Cl::get($name);
    foreach($params as $k=>$v){
    $um[$k]=$v;
    }
    $um->load();
    if($um['total'] > 0){
    return $um['lists'];
    }else{
    return array();
    }
    }function getUserSeqs($dept_seq=false){
    $params['page'] = 1;
    $params['listsize'] = 500;
    if($dept_seq){
    $params['where'] = array("fk_dept_seq=".$dept_seq);
    }
    $lists=loadList('UserManager',$params);
    $user_seqs=array();
    foreach($lists AS $list)
    {
    array_push($user_seqs, $list['user_seq']);
    }
    return $user_seqs;
    }function getUserLunchData($date, $user_seqs){
    $params['page'] = 1;
    $params['listsize'] = 1000;
    $where = array('lunch_date=\''.$date.'\'');
    array_push($where, 'fk_user_seq IN('.implode(',',$user_seqs).')');  // *
    $params['where'] = $where;
    $params['order'] = array('user_login_id ASC');
    $lists=loadList('LunchManager',$params);
    foreach($lists AS $list)
    {
    $list['lunch_insert_time'] = $list['lunch_insert_time'] > 0 ? date('Y-m-d') : '-';
    $list['lunch_check_time'] = $list['lunch_check_time'] > 0 ? date('Y-m-d H:i:s',$list['lunch_check_time']) : '-';
    $data[$list['lunch_type_name']]['total'] += 1;
    $data[$list['lunch_type_name']]['lists'][] = $list;
    }
    return $data;
    }function mergeLunchData($key, $data, $newData){
    foreach($newData as $lunchType=>$value ){
    $data[$key][$lunchType]['total'] += $value['total'];
    $data[$key][$lunchType]['lists'] = array_merge($data[$key][$lunchType]['lists'], $value['lists']);
    }
    return $data;
    }