从数据库中获取列表,并在codeigniter中按数组显示数据

时间:2017-12-09 04:54:58

标签: php codeigniter foreach html-table

请帮忙。

我有一个这样的表

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);
    }

非常感谢你的回答。

1 个答案:

答案 0 :(得分:1)

更新

如果您有一些peoplesn,如果他们生病或工作时没有特定日期的数据,则新方法有效。如果是这种情况,请显示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程序生成的,然后添加行。我们不知道每个用户的每个状态将落在哪一列,因为我们必须生成日期列。