цикл по таблице HTML и получить TR, TH и TD в PHP с простым парсером DOM - PullRequest
0 голосов
/ 10 января 2019

Мне нужно получить таблицу с простым html dom-парсером, очистить ее (удалить attr и пробелы), а затем снова вывести ее.

Мой вопрос: как я могу пройти через PHP и вывести TH и TD в одной последовательности? На данный момент он будет обрабатывать TH как TD, но мне нравится, когда TH установлен правильно.

<table>
    <tbody>
        <tr>
            <th>Date1</th>
            <th>Date2</th>
        </tr>
        <tr>
            <td>01.01.2019</td>
            <td>05.01.2019</td>
        </tr>
    </tbody>
</table>
require('simple_html_dom.php');
$html = file_get_html( "template.html" );
$table = $html->find('table', 0);
$rowData = array();

foreach($table->find('tr') as $row) {
    $keeper = array();

    foreach($row->find('td, th') as $cell) {
        $keeper[] = $cell->plaintext;
    }
    $rowData[] = $keeper;
}

echo '<table">';
foreach ($rowData as $row => $tr) {
    echo '<tr>'; 
    foreach ($tr as $td)
        echo '<td>' . $td .'</td>';
    echo '</tr>';
}
echo '</table>';

Я пробовал что-то с foreach, но я думаю, что мне нужно что-то еще.

Ты за твои идеи.

здороваться; s

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вы можете сделать это так:

require('simple_html_dom.php');
$html = file_get_html( "template.html" );
$table = $html->find('table', 0);
$rowData = array();

foreach($table->find('tr') as $row) {
    $keeper = array();

    foreach($row->find('td, th') as $cell) {
        $data = array();
        $data['tag'] = $cell->tag;                      //stored Tag and Plain Text
        $data['plaintext'] = $cell->plaintext;
        $keeper[] = $data;
    }
    $rowData[] = $keeper;
}

echo '<table>';
foreach ($rowData as $row => $tr) {
    echo '<tr>'; 
    foreach ($tr as $td)
        echo '<'.$td['tag'].'>' . $td['plaintext'] .'</'.$td['tag'].'>';  // Tag used
    echo '</tr>';
}
echo '</table>';
0 голосов
/ 10 января 2019

Вам нужно будет хранить типы ячеек, их будет достаточно для хранения на уровне строк, поскольку все они должны быть одинаковыми. Затем, когда вы перестраиваете строки, используйте этот тип в качестве типа ячейки для создания ...

foreach($table->find('tr') as $row) {
    $keeper = array();

    foreach($row->find('td, th') as $cell) {
        $keeper[] = $cell->plaintext;
    }
    // Type is the 2nd & 3rd chars of html - <th>content</th> gives th
    // Store type and cell data as two elements of the rowData
    $rowData[] = ["type" => substr($cell,1,2), "cells" => $keeper];
}

echo '<table>';
foreach ($rowData as $row => $tr) {
    echo '<tr>';
    // Loop over the cells of the row
    foreach ($tr["cells"] as $td)
        // Output row type as the element type
        echo "<$tr[type]>" . $td ."</$tr[type]>";
        echo '</tr>';
}
echo '</table>';
...