【问题标题】:Foreach in CodeIgniter controllerCodeIgniter 控制器中的 Foreach
【发布时间】:2018-01-31 09:00:44
【问题描述】:

我正在计算 total_brb_time,但无法为每个员工计算它。实际上,我想将 total_brb_time 添加到 atendance 数组中,并将其传递给名为 'attendance-sheet' 的视图。

这是我的控制器:

public function generate_report()
{
    if ($_GET) 
    {
        $fromDate   = $this->input->get('fromDate',TRUE);
        $toDate     = $this->input->get('toDate',TRUE);
        $employeeId = $this->input->get('employeeId',TRUE);

        if ($employeeId == 'none') 
        {
            $data['attendance'] = $this->Attendance_Model->filter_attendance_for_report($fromDate, $toDate);
        }
        else
        {
            $data['attendance'] = $this->Attendance_Model->filter_user_attendance_for_report($fromDate, $toDate, $employeeId);
        }

        foreach ($data as $att) 
        {

            $attDate    = $att[0]->date;
            $attUserId  = $att[0]->user_id;

            $brb        = $this->Brb_Model->filter_brb_for_report($attDate, $attUserId);

            foreach ($brb as $b) 
            {
                $brbTime    = $b->brb_time;
                $backTime   = $b->back_time;
                $brbDate    = $b->date;

                $start_time = new DateTime($brbDate.$brbTime);
                $end_time   = new DateTime($brbDate.$backTime);

                $dateDiff       = $start_time->diff($end_time);
                $brb_time[]     = $dateDiff->format("%H:%I:%S");
            }

            $sum  = strtotime('00:00:00');
            $sum2 = 0;

            foreach ($brb_time as $v)
            {
                $sum1 = strtotime($v) - $sum;
                $sum2 = $sum2 + $sum1;
            }

            $sum3 = $sum + $sum2;

            $total_brb_time  = date("H:i:s", $sum3);
            $data['brbtime'] = $total_brb_time;
        }

        $data['employees'] = $this->User_Model->get_users();
        $this->load->view('attendance-sheet', $data);
    }
}

这是我的Attendance_Model 函数:

public function filter_attendance_results($query)
{
    $sql = 'select attendance_id, date, time_in, time_out, notes, working_hours, a.user_id, a.first_name, a.last_name, a.team, a.designation from users AS a
            LEFT JOIN attendance on a.user_id= attendance.user_id ';
    $sql .= 'where 1=1 '.$query ;

    $query = $this->db->query($sql)->result();
    return $query;
}



public function filter_attendance_for_report($date1, $date2)
{
    $query = $this->db->select('*')
    ->from('attendance')
    ->join('users', 'attendance.user_id = users.user_id')
    ->where('date >=', $date1)
    ->where('date <=', $date2)
    ->order_by("date", "asc")
    ->get();

    return $query->result();
}



public function filter_user_attendance_for_report($date1, $date2, $user_id)
{
    $query = $this->db->select('*')
    ->from('attendance')
    ->join('users', 'attendance.user_id = users.user_id')
    ->where('date >=', $date1)
    ->where('date <=', $date2)
    ->where('attendance.user_id =', $user_id)
    ->order_by("date", "asc")
    ->get();

    return $query->result();
}

我想在表格行中显示每个员工的总 brb。但它只显示每行的第一个计算 brb。这是视图:

                             <div class="x_content">
                              <table id="datatable-buttons" class="table table-striped table-bordered">
                                <thead>
                                  <tr>
                                    <th>#</th>
                                    <th>Name</th>
                                    <th>Date</th>
                                    <th>Working Hours</th>
                                    <th>Total BRB Time</th>
                                  </tr>
                                </thead>


                                <tbody>
                                  <?php
                                  $i = 1;
                                   foreach ($attendance as $att): 
                                    ?>
                                  <tr>
                                      <th scope="row"><?= $i++ ?></th>
                                      <td><?= $att->first_name .'&nbsp;'. $att->last_name ?></td>
                                      <td><?= $att->date ?></td>
                                      <td><?= $att->working_hours ?></td>
                                      <td><?= $brbtime ?></td>
                                  </tr>
                                  <?php endforeach; ?>
                                </tbody>
                              </table>
                            </div>

【问题讨论】:

  • 你检查$attendance值了吗?
  • 是的。我检查了它。考勤阵列工作正常。只想计算每个员工的total_brb_time的值是失败的。
  • 您是否帮助指定解决方案。我也添加了屏幕截图。
  • $data['brbtime'] = $total_brb_time; 在每个循环中被覆盖。将其作为字段添加到您的 $attendance 数组

标签: php codeigniter foreach


【解决方案1】:

$data['brbtime'] = $total_brb_time; 行中,您将密钥brbtime 添加到所有数组$data。如果要将brbtime 添加到数组$data 的每个元素中,请执行以下操作:

foreach ($data as $att)改为foreach ($data as $key=&gt;$att)

$data['brbtime'] = $total_brb_time;改为$data[$key]['brbtime'] = $total_brb_time;

【讨论】:

  • 以及如何抓住它的价值?
  • 使用$att-&gt;brbtime;@MuahmmadUmarBilal
  • 你能在foreach之前添加var_dump($attendance);吗?
  • 我做到了。它仅在整个数组的末尾显示第一次计算的 brbtime
  • 您可以查看我在帖子开头附加的屏幕截图。以便您更好地理解问题并根据自己的风格解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 2011-08-30
相关资源
最近更新 更多