我目前正在使用 PHP(Codeigniter)在审批系统上,并且我有这种方法可以根据您的部门和职位深度来获取所有请求。
根据用户的位置深度检查请求。 6是最低的,而1是最高的。因此基本上,最多将有5个人检查该请求。例如,我的深度为6,第1行将为5,第2行将为4,依此类推。系统将找到具有相同位置深度的人员,并且找到相同的部门组。第3行和第2行将决定是否将其发送给首席执行官(1),因此默认值仅保留到2。
设计该行上方的人可以检查该请求,即使较低的行尚未对其进行检查,例如可能第1行尚未对其进行检查,因为他/她正在休假而第3行已经无法等待,因此他/她决定处理请求,因为它很重要。 现在,如果上面的行已经对其进行处理,那么下面的行将无法对其进行处理,因此只能查看它们。
现在是嵌套for
循环代码,用于检查我所说的所有内容。人们说嵌套的for
循环,尤其是嵌套循环不是一个好习惯。如何在不更改数据库的情况下更改代码?
这是我的模特
public function getRequestsToProcess($i,$depth,$departmentGroup)
{
$this->db->select('*, ns_request_info.idx as request_idx, ns_staff_info.idx as staff_idx');
$this->db->from('ns_request_info');
$this->db->join('ns_staff_info', 'ns_request_info.requested_by_idx = ns_staff_info.member_idx');
$this->db->where('line'.$i.'', $depth);
$this->db->where('line'.$i.'_action', 'PENDING');
if($departmentGroup!='HIGHER TIER'){ $this->db->where('ns_staff_info.department_group', $departmentGroup); }
$this->db->where('status', 'PENDING');
$this->db->or_where('status', 'ONGOING');
$this->db->where('line'.$i.'', $depth);
$this->db->where('line'.$i.'_action', 'PENDING');
if($departmentGroup!='HIGHER TIER'){ $this->db->where('ns_staff_info.department_group', $departmentGroup); }
$query = $this->db->get();
return $query->result_array();
}
这是我的带有嵌套for
循环的方法
public function process()
{
$data = new stdClass;
$data->param_menu = 'request';
$staffInfo = $this->staffinfo_model->selectItem(array('member_idx'=>$this->session->userdata('member_index')));
for ( $i=1 ; $i<=5 ; $i++) {
/*get lines with user depth and if same department group*/
${"line" . $i} = $this->staffrequisition_model->getRequestsToProcess($i,$staffInfo->position_depth,$staffInfo->department_group);
for ($x = 0 ; $x < count(${"line" . $i}) ; $x++) {
$counter = 0;
for ($y = $i + 1 ; $y <=5 ; $y++) {
if (${"line" . $i}[$x]['line'.$y.'_action']!=='PENDING' && ${"line" . $i}[$x]['line'.$y.'_action']!=='') {
$counter++;
break;
}
}
if ($counter > 0) {
${"line" . $i}[$x]['is_checked'] = 1;
} else {
${"line" . $i}[$x]['is_checked'] = 0;
}
}
}
$data->param_requests = array_merge($line1, $line2, $line3, $line4, $line5);
$this->load->view('dashboard/staff/process_view', $data);
}
现在is_checked
是标记,如果该请求已在上一行中检查过。希望你们能给我有关如何优化代码的任何提示。