2016-03-12 1 views
0

У меня есть довольно большой стол, который я положил на страницу с PHP вызоваPHP прибегнув ТР в таблице по классам

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

Этот файл имеет тысячи ТР и ТД в пределах. Текстовый файл динамически создается и обновляется каждые пару часов.

Некоторые из рядов имеют класс «featuredRow», что помогает при стилизации. Однако они отображаются в случайном порядке в этом текстовом файле.

Мне нужно отсортировать их так, чтобы выделенные строки были первыми. В основном возьмите все строки и поместите все featuredRows в верхнюю часть таблицы, а затем все остальные строки.

У меня уже есть код javascript, который сортирует таблицу по-разному в алфавитном порядке, но так как его сортировка по интерфейсу и таблица состоит из тысяч tr (текстовый файл имеет 7 Мб текста), это довольно напряженный в Internet Explorer, если я должен был сначала его отфильтровать (пользователь ожидает долго ждать, когда переупорядочивает всю таблицу в альпапатическом режиме, но он не должен ждать 30 секунд, пока все не будет упорядочено правильно (всего 2-3 секунды на хроме 20-30 секунд на IE)).

Поэтому я решил, что делать это на бэкэнде и отображать переупорядоченный текстовый файл сразу было бы лучше, вместо использования 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

Вот еще одна ссылка о том, как два ТРС текстового файла выглядит так (есть около 3000-4000 тех ТРС в текстовом файле) jsfiddle.net/a308w8b6

+0

Вы можете использовать классы DOM, чтобы прочитать html и отсортировать его. Другой способ сделать это будет с XSLT. –

+0

Ваш файл содержит ** только ** '' строки или это полный HTML? Кроме того, пример когерентен? Другими словами, у вас есть только два типа строк ('' и '')? – fusion3k

+0

Он содержит только строк с текстами, текстом и т. Д. В пределах трех линий. Таблица определена вне текстового файла.Да, существует только два типа линий: с классом и пустым – Romtim

ответ

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

Demo: https://ideone.com/bITopF

+0

Вы действительно думаете, что sort() может сортировать по «в каких строках содержат« class = »featuredRow» и сохранить его в теге

? Lol вы должны шутить мне – hanshenrik

+0

@hanshenrik это зависит. Мы ждем ответа OP. t знать содержимое файла – fusion3k

+1

Предполагая, что образец, который он показывает, является истинным образцом данных да. То есть: (1) у нас есть новые строки после каждого tr, (2) есть только trs. –

0
[email protected]::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(); 

EDIT: исходный код будет поставить "featuredRow" 'ы на дне, а не сверху, извините, установил его сейчас (используйте InsertBefore вместо Append)

+0

Спасибо за это, но я получаю следующую ошибку: function getElementsByTagName() на не-объекте в /home/usxjobs/public_html/wp-content/themes/Divi-Child/page-template-job-filter.php в строке 83 – Romtim

+0

Я обновил исходное сообщение со ссылками на примеры структуры в конце ее. – Romtim

Смежные вопросы