【问题标题】:PHP table formatting individual columns [duplicate]PHP表格格式化单个列[重复]
【发布时间】:2022-11-02 09:48:21
【问题描述】:

我正在使用 PHP 制作一个表格来显示来自 SQL 数据库的数据,因此我无法像往常一样格式化每个单元格。我想知道是否以及如何按列格式化。例如,我希望第一列用粗体显示,第二列用斜体显示。

PHP/HTML:

<div id="content">
    <?php
    include "External/functions.php";

    $conn = new mysqli("localhost", "username", "password", "database") or die(mysqli_error($conn));

    $query = mysqli_query($conn, "SELECT Bundle_Name, Bundle_Price FROM Bundles WHERE Is_Active='1'");
    print_table($query);
    ?>
</div>

PHP函数:

function print_table($query) {
    $fields_num = mysqli_num_fields($query);
    echo '<table>';
    while($row = mysqli_fetch_row($query)){
        echo '<tr>';
        foreach ($row as $cell) {
          echo '<td>' .$cell. '</td>';
        }
        echo '</tr>';
    }
    echo '</table>';
}

我尝试按列搜索 CSS 格式化方式,因为我很久以前就看到了如何做到这一点,但我找不到任何有用的东西。

【问题讨论】:

  • 将类添加到每一行中的每个 td 会给您的 HTML 文档添加很多不必要的膨胀。只需使用聪明/现代的 CSS 技术来识别特定的列。此外,您不必在查询结果中显式地fetch() 每一行——您只需pass the result object into a foreach loop。另一个example 和另一个simple example
  • @mickmackusa 是的,您可以通过说它是重复的来忽略这个问题。但是链接到更相关的答案不是更好吗?您链接到的答案不相关。

标签: php css html-table formatting


【解决方案1】:

有一种方法可以使用给定的代码向每一列添加一个类。

<style>
.bold{font-weight:700;}
.italic{font-style: italic;}
</style>

$columnCSS = [' class="bold"',' class="italic"', '',''];

foreach ($row as $col => $cell) {
  echo '<td columnCSS[$col] >' . $cell . '</td>';
}

我就是这样做的。
顺便说一句,我永远不会像你那样使用函数。
而且我相信任何 PHP 脚本的最顶部应该只有一个 &lt;?php,而最底部应该只有一个 ?&gt;。不再需要像&lt;?php 那样包含php。
我不会使用“死”。它没有帮助。

<?php
ob_start("ob_gzhandler");
header('Content-Type: text/html; charset=utf-8');
header('Connection: Keep-Alive');
header('Keep-Alive: timeout=5, max=100');
header('Cache-Control: max-age=0');
echo <<<EOT
<!DOCTYPE html><html lang="en"><head>< title>Titles should not be optional</title><style>
.col{font:weight:700;}
.col2{font-style:italic;}
</style></head><body>
<div id="content">
EOT;    
ob_flush();
$query = mysqli_query($conn, "SELECT `Bundle_Name`, `Bundle_Price` FROM `Bundles` WHERE `Is_Active`='1'")
echo '<table>';
$ndx = 0;
while(list($Bundle_Name, $Bundle_Price) = mysqli_fetch_array($query, MYSQLI_NUM)){
   echo "<tr><td class"col1">$Bundle_Name</td><td class"col2">$Bundle_Price</td></tr>";
  if($ndx++ > 100){ob_flush();$ndx = 0;}
}
echo '</table></div></body></html>';
?>

ob_flush()的解释
在我回显&lt;head&gt; 之后,我想强制 PHP 开始发送到浏览器。当浏览器处理 CSS 和 DOM 时,它给了我几毫秒的时间来创建主体。通过刷新,我还减少了对第一个字节的响应时间。
此外,ob_gzhandler 确保页面将通过 gzip(压缩)传输,而不管服务器设置如何。

标题有助于提高页面加载速度。特别是声明 UTF-8 字符编码。否则浏览器必须花时间来猜测字符编码实际上可能是什么。这些标头是 W3C 最佳实践推荐的。

【讨论】:

  • ob_flush() 的实现可能值得在您的帖子中进行解释。研究人员为什么要实施这项技术?你通过添加这个来防止什么坏事?
  • @mickmackusa 没有阻止任何事情。我已经更新了我的答案。
  • 如今,使用 PHP 来回显 HTML 是不受欢迎的。并且标准禁止使用短标签。你的其他想法充其量是有问题的。
  • @YourCommonSense 阅读 PHP 手册。该手册明确指出不再需要 php。我知道对 HTML 使用 echo 效率会稍低一些。除非在 HTML 模式下,否则无法刷新。正如我的回答中所述,这里的想法是使用刷新来减少“第一个字节的时间”。这也减少了创建以下 HTML 所需的时间。你有什么不明白?至于“有问题”,我会考虑来源。我非常愿意就我的任何建议与您辩论。
  • 您的大部分答案都与性能有关,但问题是关于表格格式。而且您永远不会解释解决方案,甚至会因着迷于性能而使处理实际问题的代码的可读性降低。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2013-06-19
  • 1970-01-01
相关资源
最近更新 更多