我必须建立一个HTML表格,显示用户和访问页面的数据。对于和/或foreach循环来说,它看起来很快乐,但我想不出任何更好的东西。我使用PHP,但我会认为这是语言不可知的。循环是建立表格的最佳方式吗?
回答
避免循环可能是不可能的,如果不实施,那么它仍然会发生在机器的水平。
但是,如果你想尝试保持“纯”不讨厌的代码,你至少可以做:
$tableformat = '<table><thead>%s</thead><tbody>%s</tbody></table>';
$rowformat = '<tr>%s</tr>';
$cellformat = '<td>%s</td>';
$hdata = '';
foreach($data[0] as $cellname => $cellvalue)
{
$hdata .= sprintf($cellformat, $cellname);
}
$hdata = sprintf($rowformat, $hdata);
$rdata = "";
foreach($data as $rownum => $rowvalue)
{
$row = "";
foreach($rowvalue as $colname => $colvalue)
{
$row .= sprintf($cellformat, $colvalue);
}
$rdata .= sprintf($rowformat,$row);
}
return sprintf($tableformat, $hdata, $rdata);
至少这样它可能有点维护。你不必担心不完整的字符串。
你也可以subsitutue一些代码与
$hdata = "<tr><td>" . implode("</td><td>", array_keys($data[0])) . "</td></tr>";
$rdata .= "<tr><td>" . implode("</td><td>", $rowvalue) . "</td></tr>";
其中,同时相当简洁,很可能会得到你的一点热水,最终,它会需要重新编码。 (并且implode在内部运行一个循环,所以它是一个双输)。
如果你不介意的额外函数调用的头顶(并仍在运行循环)这样可以使更多的代码简洁,没有太多负面:
$tableformat = '<table><thead>%s</thead><tbody>%s</tbody></table>';
$rowformat = '<tr>%s</tr>';
$cellformat = '<td>%s</td>';
function tr($cells)
{
$o = "";
foreach($cells as $i => $v)
{
$o .= sprintf($cellformat, $v);
}
return sprintf($rowformat, $o);
}
return sprintf($tableformat,
tr(array_keys($data[0])),
implode("", array_map('tr', $data)));
但要注意,那是太难看了,你有一天会保持这种状态,你会用lisp醒来。
好吧,如果你有多个行,每行有类似格式化的数据,我不能想办法来创建避免使用循环的表。这种类型的东西基本上是为了什么循环而发明的。
如果你给我们要建表的详细信息,也许我们可以制定一个更好的方法。
如果你那么你需要硬编码在你的代码,这可能是一个更糟糕的主意
行数和列数如果表中的数据是动态的,不使用一些类型的循环那么你必须使用一个循环。即使你得到一个为你生成表的组件,它在内部也会使用一个循环。
这取决于您对“最佳”的定义。 FOR循环会很好地完成这项工作。我不是一名PHP程序员,但在.NET中,您可以使用Repeater,这是一种可用于声明表格HTML的模板。它具有标题,页脚和每个项目的模板。你将一个数据源绑定到中继器,它会比使用FOR循环更优雅地生成表格HTML。我想在PHP中可能会有某种类似的模板模板。
在最后,不过,即使是中继器使用某种循环......
我强烈推荐PHP的Smarty模板引擎。这将允许您使用Smarty语法将表(以及不可避免的关联循环)移动到模板中,因此它将更清晰并与业务逻辑更加分离。您可以用HTML代码片段中的几个简单标签替换您示例中几乎所有的代码。查看Smarty页面上的速成课程,了解使用表格的示例。
我通常使用循环和implode
为此,在PHP中。在支持函数式编程的语言中,我会以不同的方式做。
function render_table($data) {
$html = '<table>';
$tr = array();
foreach (array_keys($data[0]) as $key) {
$tr[] = '<th>' . htmlspecialchars($key) . '</th>';
}
$html .= "\n" . '<thead>' . "\n" . '<tr>' . "\n" . implode("\n", $tr) . '</tr>' . '</thead>';
$tbody = array();
foreach ($data as $row) {
$tr = array();
foreach ($row as $value) {
$tr[] = '<td>' . htmlspecialchars($value) . '</td>';
}
$tbody[] = '<tr>' . "\n" . implode("\n", $tr) . '</tr>';
}
$html .= "\n" . '<tbody>' . "\n" . implode("\n", $tbody) . '</tbody>';
$html .= '</table>';
return $html;
}
为什么要避免循环?如果你有一套物品,并且你想要显示每个物品,那么确定地循环这些物品是明显的解决方案?
如果您试图从视图中分离模型或编写更多可读代码,但循环本身并不坏。
- 1. 这是使用LINQ创建频率表的最佳方式吗?
- 2. 什么是创建自己的Wordpress循环的最佳方法?
- 3. 最佳方式吗?
- 4. 最佳方式吗?
- 5. 最佳方式吗?
- 6. 最佳方式吗?
- 7. 建立我的数据库的最佳方式是什么
- 8. 哪种编写循环的最佳方式是?
- 9. 循环动画的最佳方式是什么?
- 10. 在Java中退出循环的最佳方式是什么?
- 11. C++什么是停止for循环的“最佳”方式?
- 12. VBA什么是循环中增量的最佳方式
- 13. 实现并行无限循环的最佳方式是什么?
- 14. 实现颜色循环背景的最佳方式是什么?
- 15. 在JSON中循环数组的最佳方式是什么?
- 16. 迭代循环包装索引的最佳方式是什么?
- 17. 什么是在scala中循环数组的最佳方式
- 18. 建立简单网站的最佳方式是什么?
- 19. 在Rails中建立数据库的最佳方式是什么?
- 20. 建立一对多关系的最佳方式是什么?
- 21. 是卡桑德拉建立报告系统的最佳方式
- 22. 什么是同时建立多个连接的最佳方式?
- 23. 如何循环访问地图列表中的最佳方式
- 24. 是使用lateinit的最佳方式吗?
- 25. 在java中创建无限循环的最佳方式是什么?
- 26. 在go html模板中创建循环的最佳方式是什么?
- 27. 建立Ruby/Java构建/部署的最佳方式?
- 28. 防止DocumentEvent循环的最佳方法?
- 29. 与JS建立JSON的最佳方法
- 30. Prince是在Ruby on Rails中创建PDF的最佳方式吗?
我真的很喜欢那样。它使得代码更加整洁,而不是随机字符串循环。 – 2008-11-05 15:22:35
在PHP代码中损坏HTML,这是(IMNSHO)甚至比HTML中的代码糟糕。 – Javier 2008-11-05 15:23:32