Как объединить две ячейки таблицы в одной строке таблицы? - PullRequest
1 голос
/ 20 февраля 2020

Как я могу объединить date td / cell в time td / cell?

Я бы хотел, чтобы строка таблицы состояла из 3 ячеек, средняя ячейка должна читать date time.

Мой код:

$dom = new DOMDocument;
$dom->loadHTMLFile("test.html");
$dom->validateOnParse = true;
$xpath                = new DOMXPath($dom);
$table = $xpath->query("//*[@class='mytable']//tbody")->item(0);
$td = $table->getElementsbytagname("td");

тест. html содержимое файла:

<table class="mytable">
  <tbody><tr>
      <td>date</td>
      <td>td1</td>
      <td>time</td>
      <td>td2</td>
    </tr></tbody>
</table>

Желаемый результат:

<table class="mytable">
  <tbody><tr>
      <td>td1</td>
      <td>date time</td>
      <td>td2</td>
    </tr></tbody>
</table>

1 Ответ

1 голос
/ 20 февраля 2020

Соберите три ячейки. Замените текст 3-й ячейки, используя текст 1-й ячейки, затем удалите первую ячейку.

Код ( Демонстрация )

$html = <<<HTML
<table class="mytable">
  <tbody><tr>
      <td>date</td>
      <td>td1</td>
      <td>time</td>
      <td>td2</td>
    </tr></tbody>
</table>
HTML;

$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
foreach ($xpath->query("//table[@class='mytable']/tbody/tr") as $tr) {
    $tds = $tr->getElementsByTagName("td");
    $tds->item(2)->nodeValue = $tds->item(0)->nodeValue .
                               ' ' . $tds->item(2)->nodeValue;
    $tr->removeChild($tds->item(0));
}
echo $dom->saveHTML();

Вывод:

<table class="mytable">
  <tbody><tr>

      <td>td1</td>
      <td>date time</td>
      <td>td2</td>
    </tr></tbody>
</table>
...