PHP按类在表中使用tr

时间:2016-03-12 02:13:37

标签: php jquery html

我有一个非常大的表,我把它放在页面上用php调用

<?php include('7c2dsf12c24-4441e-532ded8-88dsc7-4fsd2c8.txt'); ?>

该文件中包含数以千计的TR和TD。 文本文件每隔几个小时动态创建和更新。

有些行有&#34; featuredRow&#34;他们上课,这有助于造型。 但是,它们在该文本文件中以随机顺序出现。

我需要对它们进行排序,以便首先显示特征行。基本上取所有行,并将所有featuresRows放在表的顶部,然后是所有其他行。

我已经有了javascript代码,按字母顺序按不同的td对表进行排序,但由于它是一个前端排序,并且该表由数千个tr(文本文件为7mb的文本)组成),如果我最初要过滤它,那么它在Internet Explorer上是一个很大的压力(用户期望在重新排序整个表时等待很长时间,但是他不会等待30秒,直到所有订单都正确(仅限) IE上2-3秒的镀铬时间是20-30秒。)

因此,我认为在后端执行此操作,并立即显示重新排序的文本文件将更好,而不是使用dom,创建大型数组并使用户的浏览器滞后。

TL / DR 例如,文件的结构如下所示:

<tr><td></td><td></td></tr>
<tr class="featuredRow"><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr class="featuredRow"><td></td><td></td></tr>
<tr class="featuredRow"><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr class="featuredRow"><td></td><td></td></tr>
<tr><td></td><td></td></tr>

我需要获取该文件并将结构重新排序为:

<tr class="featuredRow"><td></td><td></td></tr>
<tr class="featuredRow"><td></td><td></td></tr>
<tr class="featuredRow"><td></td><td></td></tr>
<tr class="featuredRow"><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>

我不想使用JS,因为有数千行,兆字节的数据,并且在IE上需要很长时间才能在前端执行。

在PHP中使用它的最简单方法是什么?

谢谢

P.S。 以下是html / php现在的样子 - jsfiddle.net/1pggwuah

以下是关于两个文本文件的外观的另一个链接(文本文件中有大约3,000-4,000个这样的文件)jsfiddle.net/a308w8b6

2 个答案:

答案 0 :(得分:2)

$rows = file_get_contents('/path/to/rows.html');
$rows = explode('<tr', $rows);
sort($rows);
$rows = implode('<tr', $rows);

演示:https://ideone.com/bITopF

答案 1 :(得分:0)

$domd=@DOMDocument::loadHTMLFile('7c2dsf12c24-4441e-532ded8-88dsc7-4fsd2c8.txt');
$masterele=$domd->getElementsByTagName("table")->item(0);
foreach($domd->getElementsByTagName("tr") as $trele){
if($trele->getAttribute("class")!=="featuredRow"){continue;}
$trele->parentNode->removeChild($trele);
$masterele->insertBefore($trele,$masterele->firstChild);
}
echo $domd->saveHTML();
编辑:原始代码将“featuredRow”放在底部,而不是顶部,抱歉,现在修复它(使用insertBefore而不是追加)