请帮忙。
我有一个这样的表
sn | date | status |
001 | 2017-01-01| work |
001 | 2017-01-02| work |
001 | 2017-01-03| work |
001 | 2017-01-04| work |
002 | 2017-01-01| sick |
002 | 2017-01-02| sick |
002 | 2017-01-03| sick |
002 | 2017-01-04| sick |
003 | 2017-01-01| work |
003 | 2017-01-02| work |
003 | 2017-01-03| work |
003 | 2017-01-04| work |
我想像我这样将表格显示在我的视图中
<table border="1">
<tr>
<td>sn</td>
<td>01</td>
<td>02</td>
<td>03</td>
<td>04</td>
</tr>
<tr>
<td>001</td>
<td>work</td>
<td>work</td>
<td>work</td>
<td>work</td>
</tr>
<tr>
<td>002</td>
<td>sick</td>
<td>sick</td>
<td>sick</td>
<td>sick</td>
</tr>
<tr>
<td>003</td>
<td>work</td>
<td>work</td>
<td>work</td>
<td>work</td>
</tr>
</table>
如何为这种情况编写代码模型和控制器。对这种情况非常困惑。
我只是创建这样的模型
function attendance()
{
$this->db->select('*');
$this->db->from('mytable');;
$query=$this->db->get();
return $query;
}
和我的控制器一样
function get_attendance()
{ $this->m_human_capital->attendance()->result();
$this->template->display('myview',$data);
}
非常感谢你的回答。
答案 0 :(得分:1)
如果您有一些people
或sn
,如果他们生病或工作时没有特定日期的数据,则新方法有效。如果是这种情况,请显示X。
还考虑在模型中按日期排序!
控制器:
function get_attendance() {
$rows = $this->m_human_capital->attendance()->result_array();
$dates = array();
$identifiers = array();
$people = array();
foreach ($rows as $row) {
if (empty($row['date']) || empty($row['sn'])) {
continue; // no date or sn, nothing to print for this row...
}
// in array assures unique values
if (!in_array($row['date'], $dates)) {
$dates[] = $row['date'];
}
if (!in_array($row['sn'], $identifiers)) {
$identifiers[] = $row['sn'];
}
// this may seem convoluted, take your time to understand
$people[$row['date']][$row['sn']] = $row;
}
$data = array(
'people' => $people,
'identifiers' => $identifiers,
'dates' => $dates,
'title' => 'sometitle' // or...
);
// ... $data['tite'] = 'sometitle';
$this->template->display('myview', $data);
}
查看:
<table border='1'>
<tr>
<th>sn</th>
<?php
foreach ($dates as $date) {
echo "<th>{$date}</th>";
}
?>
</tr>
<?php foreach ($identifiers as $id) { ?>
<tr>
<td><?php echo $id; ?></td>
<?php
foreach ($dates as $date) {
echo '<td>';
if (isset($people[$date][$id]['date']) && $people[$date][$id]['date'] == $date) {
echo $people[$date][$id]['status'];
} else {
echo 'x';
}
echo '</td>';
}
?>
</tr>
<?php } ?>
</table>
仅处理“同类”输入,例如日期排列,每个人都有数据,或者sn
每天都有关于他们是在工作还是生病的数据。
在您的控制器中执行以下操作,因为您没有正确传递数据:
function get_attendance() {
$rows = $this->m_human_capital->attendance()->result_array();
$data = array();
foreach ($rows as $row) {
$data[$row['sn']][] = $row;
}
$this->load->helper('somehelper'); // name of helper where you put the function below.
$dates = unique_multidim_array($rows, 'date');
$view = array(
'rows' => $data,
'dates' => $dates,
'title' => 'sometitle'
);
$this->template->display('myview', $view);
}
将此功能存储在帮助程序中并加载它:
<?php
function unique_multidim_array($array, $key) {
$temp_array = array();
$i = 0;
$key_array = array();
foreach ($array as $val) {
if (!in_array($val[$key], $key_array)) {
$key_array[$i] = $val[$key];
$temp_array[$i] = $val;
}
$i++;
}
return $temp_array;
}
?>
然后在你看来:
<table border="1">
<tr>
<th>sn</th>
<?php foreach ($dates as $row): ?>
<th><?php echo $row['date']; ?></th>
<?php endforeach; ?>
</tr>
<?php
foreach ($rows as $i => $j):
echo "<tr><td>$i</td>";
foreach ($j as $v):
?>
<td><?php echo $v['status']; ?></td>
<?php
endforeach;
echo '</tr>';
endforeach;
?>
</table>
您将面临的问题是,如果表格看起来与上面不完全相同,您可能会得到奇怪的结果。这里的问题是表是通过foreach程序生成的,然后添加行。我们不知道每个用户的每个状态将落在哪一列,因为我们必须已生成日期列。