在php codeigniter中使用if else显示嵌套的foreach

时间:2016-04-23 06:56:38

标签: php codeigniter if-statement foreach nested

控制器

public function admin()
{
    // get the current date employee logged in details
    $data['get_attendance'] = $this->attendance_model->get_attendance();

    // get the active employee details
    $data['get_employee'] = $this->attendance_model->get_employee();

    //print_r($data['get_employee']); exit();

    // attendance page
    $data['header'] = "Employee";
    $data['sub_header'] = "Attendance employee";
    $data['main_content'] = 'attendance/admin_list';
    $this->load->view('employeelayout/main',$data);
}

模型

public function get_attendance()
{
    return $this->db->where('date',date('Y-m-d'))->get('attendance')->result_array();
}

public function get_employee()
{
    return $this->db->where('is_active',1)->get('employee')->result_array();
}

视图

<?php $count = 1 ?>
<?php foreach ($get_employee as $employee) { ?>
<tr class="gradeX">
    <td><?php echo $count++ ?></td>
    <td><?php echo $employee['first_name'] . ' ' . $employee['last_name'] ?></td>
    <td><?php echo $employee['employee_number'] ?></td>
       <?php foreach ($get_attendance as $attendance) : ?>
        <!-- if employee exists -->
           <?php if($employee['employee_id'] == $attendance['employee_id'] ) { ?>
            <td><?php echo date('M-Dj-Y',strtotime($attendance['date'])) ?></td>
            <td><?php echo $attendance['mark_in_time'] ?></td>
               <td>mark out going</td>
               <td>Active</td> 
            <?php  break; ?>

       <?php } elseif($employee['employee_id'] != $attendance['employee_id'] ) { ?>
           <td><?php echo "i'm absent" ?></td>
           <?php  break; ?>
      <?php  } ?>
       <?php endforeach; ?> 
    </tr> 

    <?php } ?>

我想显示当前登录的(现在)员工并显示缺席的员工。我从员工表中获取员工详细信息。 出勤表的出勤细节。如果员工不在,我想显示缺席的其他人显示登录详细信息。这里foreach循环没有正确显示if条件。这个循环有什么问题。

2 个答案:

答案 0 :(得分:0)

试试这个:

<?php foreach ($get_employee as $employee) : ?>
    <tr class="gradeX">
        <td><?php echo $count++ ?></td>
        <td><?php echo $employee['first_name'] . ' ' . $employee['last_name'] ?></td>
        <td><?php echo $employee['employee_number'] ?></td>
           <?php foreach ($get_attendance as $attendance) : ?>
            <!-- if employee exists -->
             <?php if($employee['employee_id'] == $attendance['employee_id']) : ?>
                <td><?php echo date('M-Dj-Y',strtotime($attendance['date'])) ?></td>
                <td><?php echo $attendance['mark_in_time'] ?></td>
                   <td>mark out going</td>
                   <td>Active</td>

             <?php elseif ($employee['employee_id'] != $attendance['employee_id']) : ?>
               <td><?php echo "i'm absent" ?></td>

             <?php else : ?>

             <?php endif; ?>

          <?php endforeach; ?> 
    </tr> 
<?php endforeach; ?>

答案 1 :(得分:0)

应用左连接代替两个不同的查询。

因为目前你已经应用了两个循环及其比较,将耗费大量的执行时间而且我不认为这是好的代码如果你获得数千个数据而不是绝对可以分析执行时间。 / p>

因此,最好应用加入查询。