【发布时间】:2019-02-28 16:46:42
【问题描述】:
我正在使用 Codeigniter 3 和 table library 以按以下格式显示一些数据;
+---------------+---------------------+
| id | 102 |
+---------------+---------------------+
| First Name | Ross |
+---------------+---------------------+
| Last Name | Bing |
+---------------+---------------------+
| Title | Doctor |
+---------------+---------------------+
| Timestamp | 2019-01-18 10:17:05 |
+---------------+---------------------+
| Member Number | |
+---------------+---------------------+
$tableData 的 vardump 是;
Array
(
[0] => Array
(
[id] => 102
[firstname] => Ross
[lastname] => Bing
[title] => Doctor
[timestamp] => 2019-01-18 10:17:05
[member_no] =>
)
)
我用来生成 HTML 表格的 PHP 代码是;
$tableData = $this->My_model->getData();
$heading = array(
'id' => 'ID',
'firstname' => 'First Name',
'lastname' => 'Last Name',
'title' => 'Title',
'timestamp' => 'Date Submitted',
'member_no' => 'Member Number'
);
$fields = array_keys($tableData[0]);
$rows = array();
foreach($fields as $key => $field) {
$rows[$key][0] = array(
'data' => '<strong>' . $heading[$field] . '</strong>'
);
foreach($tableData as $key2 => $item) {
$rows[$key][$key2 + 1] = $item[$field];
}
}
foreach($rows as $row) {
$this->table->add_row($row);
}
上面的代码工作正常,但是如果一行是空的(参见上面的member_no),我想做两件事之一(以最简单的为准);
- 完全隐藏表格行
- 在表格单元格中显示
not available
我怎样才能做到这一点?
【问题讨论】:
-
类似:$rows[$key][$key2 + 1] = ($item[$field!=''])?$item[$field]:'不可用'跨度>
-
我发现这 3 个 foreach 循环是
ugly。对不起,但他们是。您可能可以做一些array_intersect_key和array_merge魔术来摆脱其中的一些。 -
我需要输入和输出数据的示例,例如
$tableData的样子和$rows的样子。这里的一个示例是,当您将array_merge与字符串键一起使用时,第二个数组中的数据会替换第一个数组中的数据,但会保留第一个数组中键的顺序。您还可以array_filter输入数据,删除任何空值,然后使用与$header数组匹配的键预填充数组(使用not available),然后在合并它们时从过滤器中删除任何内容保留默认值...等
标签: php arrays codeigniter foreach codeigniter-3