如何使用 flush() 或 ob_flush() 逐列而不是逐行打印 table

How to use flush() or ob_flush() to make a table print out column by column instead of row by row

我有一个table,其结构类似于此

 <table style="width:100%">
  <tr>
    <th>Firstname</th>
    <th>Lastname</th> 
    <th>Age</th>
  </tr>
  <tr>
    <td>Jill</td>
    <td>Smith</td> 
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td> 
    <td>94</td>
  </tr>
</table>

我希望能够使用 PHP 的刷新功能在数据输出时逐列打印出来。所以在这个例子中,我希望它打印名字、吉尔、夏娃,然后是第二列;姓史密斯; Jackon等等等等。

我不想等到数据加载完毕(脚本需要一段时间,重点是让它在 运行 时回显)而且我不想处理AJAX.

我唯一能想到的就是使用一堆 go to(我知道那是一个糟糕的实现)。有人有什么想法吗?

首先,您可能应该加快脚本或数据库查询的速度。这将解决问题而不用任何技巧。

如果您真的想使用 flush 来输出列,可以选择生成 JavaScript。浏览器可能会执行 javascript 并在您的 table 中插入列。 这种方法比较复杂,不推荐

示例:

<script src="...jquery..."></script>

<table id="mytable">
    <!-- data will come later -->
</table>

<script>
    addColumnToTable = function(table, column) {
       // You need to implement this to manipulate table "mytable"
    }
</script>

// Generate in php and flush:
<script>
   var column = { "header": "Firstname", "rows": ["Jill", "Eve"] }
   addColumnToTable($('#mytable'), column)
</script>

// Generate in php and flush:
<script>
   var column = { "header": "Lastname", "rows": ["Smith", "Jackson"] }
   addColumnToTable($('#mytable'), column)
</script>

// Generate in php and flush:
<script>
   var column = { "header": "Age", "rows": ["50", "94"] }
   addColumnToTable($('#mytable'), column)
</script>

我想我想出了一个非常有创意的解决方案。它确实使用了一行 javascript,但它基本上只是 PHP 中的一个手动 AJAX 过程。

所以现在我有一个文件是 运行 并且它是 运行 它正在输出一个 table 作为 PHP 页面 运行 .我所做的是将其分成两个文件。这个例子是你如何基本上擦除页面(或页面上的元素并重新加载它)。所以你会有第一页

    <?php

$i=0;

while($i<100){
    echo (file_get_contents("http://192.241.240.69/hakre/page2.php?var=$i"));
    flush();
    ob_flush();
    usleep(200000);
    $i++;
}

这会调用具有 javascript 擦除页面功能的第 2 页(可以擦除单个元素并使用更新后的内容重新加载它(参见下面的第 2 页代码)

    <?php

$var = $_GET['var'];
echo '<script type="text/javascript">'."document.body.innerHTML = ''".'</script>';
echo $var;

?>

结果会是http://192.241.240.69/hakre/page1.php - not the sexiest solution but it does use pretty much only one line of javascript and almost all PHP in conjunction with the flush function. Here is an example writing a page column by column http://192.241.240.69/hakre/Table.php