RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 801205
Accepted
Alex
Alex
Asked:2020-03-19 05:50:28 +0000 UTC2020-03-19 05:50:28 +0000 UTC 2020-03-19 05:50:28 +0000 UTC

以编程方式将表拆分为 2 个子表

  • 772

你好。输入是 HTML 代码的一部分。它可以包含一个或多个表。有必要将每个表格分成 2 个子表格,并放置在带有 2 个单元格的表格内 - 左侧单元格中的第一部分,右侧单元格中的第二部分。表格通常是 2 列的,但也可以是水平合并的单元格(如果很难,那么你可以忽略它)。

在此处输入图像描述 请告诉我以编程方式执行此操作的最简单方法。也许有现成的片段。问题在 php.ini 中得到解决。我知道您很可能需要为此使用 HTML 解析器,例如 Simple HTML DOM,但也许有一个不使用第三方库的解决方案。

这对于以编程方式即时生成 pdf 是必需的,可用于电子邮件通讯和使用 html4 的其他任务。

php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    wirtwelt
    2020-03-21T15:02:56Z2020-03-21T15:02:56Z

    所以,我们知道HTML作为输入来的,有一个或多个表格,需要分成两部分,必须折叠成两列,也有一个表格

    子任务:

    1. 表块的选择。我们假设表格没有嵌套,尽管这也可以单独检查。如果表格是嵌套的,那么我们将无法为这个问题陈述拆分正常的表格,需要额外的条件。
    2. 在表格的选定块中,您需要选择所有行。单元格可以任意水平组合,对我们来说没关系,我们处理整个表格行。
    3. 在步骤 2 中获得的行必须分成两半并折叠成两个额外的表格 - 一个在左侧,另一个在右侧。

    <?php
    
    require_once('simple_html_dom.php');
    
    $html = new simple_html_dom();
    $html->load_file('input1.html');
    
    // Смотрим, что было в начале
    print $html->save();
    
    // Ищем таблицы
    $tables = $html->find('table');
    if ($tables && is_array($tables) && count($tables)) {
    	foreach ($tables as $table) {
    		// Разбиваем исходную таблицу на две части
    		$left_table = new simple_html_dom();
    		$left_table->load($table->outertext);
    		$right_table = new simple_html_dom();
    		$right_table->load($table->outertext);
    		// Из первой таблицы необходимо удалить все строки с номером более count/2
    		$rows = $left_table->find('tr');
    		if ($rows && is_array($rows) && ($count = count($rows))) {
    			foreach ($rows as $index => $row) {
    				if ($index >= round($count/2)) {
    					$row->outertext = '';
    				}
    			}
    		}
    		// Из второй таблицы необходимо удалить все строки с номером менее count/2
    		$rows = $right_table->find('tr');
    		if ($rows && is_array($rows) && ($count = count($rows))) {
    			foreach ($rows as $index => $row) {
    				if ($index < round($count/2)) {
    					$row->outertext = '';
    				}
    			}
    		}
    		// Собираем результат. Здесь можно поправить внешний вид результата так, как нужно
    		$two_tables = '
    		<table>
    		<tr>
    			<td valign="top">'.$left_table->outertext.'</td>
    			<td valign="top">'.$right_table->outertext.'</td>
    		</tr>
    		</table>
    		';
    		// Заменяем исходную таблицу на две
    		$table->outertext = $two_tables;
    		// Освобождаем память, может понадобиться при большом количестве таблиц, но в целом не обязательно
    		$left_table->clear();
    		$right_table->clear();
    	}
    }
    
    // Выводим результат после замены, в виде строки
    print $html->save();
    
    // Также можно сохранить в файл
    $html->save('output.html');
    
    ?>

    PHP代码不想作为代码插入,格式很愚蠢,所以我通过代码段粘贴它。很抱歉给您带来不便,请不要这样做。

    对于测试数据,我从问题评论中的链接中获取了一个简单的表格:

    输入表

    拆分操作的结果将是下表,其中包含两个表:

    输出表

    • 3

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5