php - 我的嵌套 for 循环慢吗?
问题描述
我目前正在使用PHP (Codeigniter)开发审批系统,我有这种方法可以根据您的部门组和职位深度获取所有请求。
请求的检查基于用户的位置深度。6 为最低,1 为最高。所以基本上最多有5个人来检查请求。例如,我的深度为 6,line1 为 5,line2 为 4,依此类推。系统会找到具有类似职位深度和相同部门组的人员。第 3 行和第 2 行将决定是否将其发送给 ceo (1),因此默认仅到 2。
它的设计是让线上的人可以检查请求,即使下面的线还没有检查它,例如可能 line1 还没有检查它,因为他/她正在度假,而 line3 不能等待,所以他/她决定处理请求,因为它很重要。现在如果上面的行已经处理了它,下面的行就不能再处理它了,所以他们只能被允许查看它。
现在这里是我的嵌套for
循环代码,用于检查我所说的所有这些内容。人们说嵌套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
如果请求已经在上面的行中检查,则现在是标记。我希望你们能给我任何关于如何优化我的代码的提示。
解决方案
推荐阅读
- javascript - 如何在我的页面上选择任何标签来为其分配类名?
- typescript - 将 jsdoc/typescript 类型限制为数组成员
- algorithm - 找到一个算法来获取两个特定的输入并返回一个特定的输出
- c# - 通过返回的泛型 T 类型根据条件创建实例
- qt - 如何根据 QListView 中的特定 QString 内容更改 QGraphicsView 背景颜色
- c++ - 包含
导致(未知属性“no_init_all”)错误 - assembly - 汇编乘以 16 位无符号打印产品
- java - 回收站视图无法正常工作且没有任何错误
- typo3 - 浏览器中的详细信息页面标题下降到后端新闻详细信息页面标题
- location - 访问“com.google.location.sample”会给出“无权读取此私有数据源的数据”