如何使用 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
我有一个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