PHP 教程:从文本文件生成带有汇总行的 HTML 表格

本文介绍如何使用 PHP 从文本文件中读取数据,并将其格式化为 HTML 表格。除了基本的数据展示,我们还将计算并添加一个包含汇总信息的最后一行,例如不同名称的数量、总薪资、最常见的城镇以及平均年龄。

从文本文件读取数据并生成 HTML 表格

首先,我们需要从文本文件中读取数据。假设我们的文本文件 name.txt 的内容如下:

name:Ivan,Salary:5000,town:Sofia,age:20
name:Pesho,Salary:1500,town:Pleven,age:19
name:Gosho,Salary:2000,town:Varna,age:18
name:Georgi,Salary:3000,town:Pleven,age:46
name:Ivailo,Salary:6000,town:Pleven ,age:25
name:Stamat,Salary:7000,town:Varna,age:46
name:Aleksandar,Salary:1500,town:Burgas,age:44
name:Kiko,Salary:5000,town:Plovdiv,age:25
name:Misho,Salary:5250,town:Sofia,age:24
name:Daniel,Salary:3000,town:Plovdiv,age:34
name:John,Salary:6000,town:Pleven,age:50
name:Ana,Salary:9000,town:Sofia,age:18
name:Maria,Salary:9500,town:Sofia,age:30
name:Marian,Salary:9500,town:Sofia,age:20
name:Petko,Salary:9500,town:Sofia,age:19
name:Nikola,Salary:9500,town:Sofia,age:45
name:Ani,Salary:9500,town:Sofia,age:47

以下 PHP 代码将读取此文件,并将其内容显示在一个 HTML 表格中:

<?php

$file = fopen('name.txt', "r");
$names = [];
$cities = [];
$salaries = [];
$ages = [];

echo "";
echo "";

while (!feof($file)) {
    $string = fgets($file);
    $finalArray = [];

    $asArr = explode(',', $string);
    foreach ($asArr as $val) {
        $tmp = explode(':', $val);
        $finalArray[$tmp[0]] = trim($tmp[1] ?? ""); // 使用 null 合并运算符并trim
    }

    $cols = array_values($finalArray);
    [$name, $salary, $city, $age] = $cols; // 使用列表赋值

    $names[] = $name;
    $salaries[] = $salary;
    $cities[] = $city;
    $ages[] = $age;

    echo '';
    foreach ($cols as $col) {
        echo '';
    }
    echo '';

}

//计算汇总行
$countOfNames = count(array_unique($names));
$citiesCount = array_count_values($cities);
$maxVal = max($citiesCount);
$mostCommonCity = array_search($maxVal, $citiesCount);
$sumOnAllSalary = array_sum($salaries);
$averageAges = (int)(array_sum($ages) / count($ages));

echo '';
echo '';
echo '';
echo '';
echo '';
echo '';

echo "
NameSalaryTownAge
' . $col . '
' . $countOfNames . '' . $sumOnAllSalary . '' . $mostCommonCity . '' . $averageAges . '
"; fclose($file); ?>

代码解释:

  1. 打开文件: fopen('name.txt', "r") 打开名为 name.txt 的文件,以只读模式打开。
  2. 初始化数组: $names, $cities, $salaries, $ages 用于存储从文件中提取的数据,以便后续计算。
  3. 输出表格头部: echo "

    "; 和 echo "

    "; 输出 HTML 表格的开始标签和表头。

  4. 循环读取文件: while (!feof($file)) 循环读取文件,直到文件结束。
  5. 读取一行数据: fgets($file) 从文件中读取一行数据。
  6. 分割字符串:

    • explode(',', $string) 将字符串按逗号分割成数组。
    • explode(':', $val) 将每个数组元素按冒号分割成键值对。
    • trim($tmp[1] ?? "") 移除值的前后空格,并使用 null 合并运算符,防止键不存在时出现错误。
  7. 提取数据到数组: 将提取的数据分别存入 $names, $salaries, $cities, $ages 数组。
  8. 输出表格行: echo '

  9. '; 和 echo '

    '; 输出 HTML 表格的每一行数据。

  10. 计算汇总信息:

    • count(array_unique($names)) 计算不同名称的数量。
    • array_count_values($cities) 统计每个城市出现的次数。
    • max($citiesCount) 找到出现次数最多的城市。
    • array_search($maxVal, $citiesCount) 获取出现次数最多的城市的名字。
    • array_sum($salaries) 计算所有薪资的总和。
    • (int)(array_sum($ages) / count($ages)) 计算平均年龄,并转换为整数。
  11. 输出汇总行: echo '

  12. '; 和 echo '

    '; 输出 HTML 表格的最后一行汇总数据。

  13. 关闭表格: echo "
  14. Name Salary Town Age
    ' . $col . '
    ' . ... . '

    "; 输出 HTML 表格的结束标签。

  15. 关闭文件: fclose($file) 关闭打开的文件。

注意事项

  • 确保 name.txt 文件存在,并且 PHP 脚本有读取权限。
  • 代码中的 $tmp[1] ?? "" 使用了 PHP 7+ 的 null 合并运算符。 如果你使用的是 PHP 7 之前的版本,请使用 isset($tmp[1]) ? $tmp[1] : "" 代替。
  • 可以根据实际需要修改表格的样式和汇总信息的计算方式。
  • 建议对用户输入的数据进行验证和过滤,以防止安全漏洞,例如跨站脚本攻击 (XSS)。
  • 错误处理:在实际应用中,应该添加错误处理机制,例如检查文件是否成功打开,以及在数据处理过程中是否发生错误。

总结

通过以上代码,我们成功地从文本文件中读取数据,并将其格式化为 HTML 表格,同时计算并添加了包含汇总信息的最后一行。这个例子展示了 PHP 在数据处理和网页生成方面的强大功能。你可以根据自己的需求修改和扩展这段代码,以适应更复杂的应用场景。

以上就是PHP 教程:从文本文件生成带有汇总行的 HTML 表格的详细内容,更多请关注骃骐网【www.myinqi.com】。

相关推荐:

Python内置函数有哪些_常用BIF如len/max/min/sum汇总

Python内置函数是类型协议的快捷入口,如len()调用__len__()、max()依赖__iter__()和比较方法,理解此机制可避免参数类型错误与兼容性问题。 Python内置函数不是“功能列表”,而是“类型协议的快捷入口” Python的内置函数(BIF)绝大多数不是独立实现的逻辑,而是对对象__len__、__iter__、__lt__等特殊方法的统一调用封装。比如len(x)实际触发...

高效处理数百个大文本文件并逐行计算平均值的完整教程

本文介绍如何使用 Dask 替代 NumPy + 原生 Python 方案,高效处理 300 个、各含约 900 万整数的 .txt 文件,实现毫秒级逐行平均(共 900 万行),避免内存爆炸与 I/O 瓶颈。 本文介绍如何使用 dask 替代 numpy + 原生 python 方案,高效处理 300 个、各含约 900 万整数的 `.txt` 文件,实现毫秒级逐行平均(共 900 万行),避免...

高效处理海量文本文件并逐行计算平均值的 Python 教程

本文介绍如何使用 dask 替代传统 numpy + 文件循环方案,对数百个大文本文件(总计约 900 万行)进行逐行平均值计算,在 10–12 秒内完成,显著提升 i/o 与内存效率。 本文介绍如何使用 dask 替代传统 numpy + 文件循环方案,对数百个大文本文件(总计约 900 万行)进行逐行平均值计算,在 10–12 秒内完成,显著提升 i/o 与内存效率。 在科学计算与数据预处理中...

如何高效计算数百个大文本文件每行的平均值

本文介绍使用 dask 并行处理 300 个、各约 30mb 的纯数字文本文件,按行逐行求跨文件平均值(即第1行所有文件的值取均值,第2行同理),在数十秒内完成,远超传统 numpy 串行方案。 本文介绍使用 dask 并行处理 300 个、各约 30mb 的纯数字文本文件,按行逐行求跨文件平均值(即第1行所有文件的值取均值,第2行同理),在数十秒内完成,远超传统 numpy 串行方案。 处理海量...

如何用Python自动从PDF报表中提取表格数据_使用camelot-py库精准识别

camelot-py默认提取PDF表格不可靠,因其lattice模式依赖显式边框、stream模式易受页眉页脚干扰,且不返回坐标与置信度;需结合pdfplumber定位区域,混合flavor、手动设table_areas和columns,并校验accuracy、空值及可视化覆盖。 camelot-py 能提取 PDF 表格,但默认设置下极易漏行、错列、吞空格,尤其对带合并单元格、浅色边框或扫描件(...

Python如何实现对大型文本文件的逐行倒序读取_结合os.seek与buffer

不能直接用 reversed(open(...)),因为文件对象不支持索引且未实现 __reversed__,会报 TypeError;需用 os.seek() 从末尾反向扫描换行符来逐行倒序读取。 为什么不能直接用 reversed(open(...)) 因为 reversed() 要求对象实现 __reversed__ 或支持索引,而文件对象既不支持随机索引,也不把整个文件加载进内存——所以直...

如何从分号分隔的文本文件中解析公司名称与营收数据并找出总营收最高的公司

本文详解如何读取含公司名与多期营收的文本文件,将每行按分号拆分为结构化数据,计算各公司总营收,并准确返回营收最高的公司名称及数值。 本文详解如何读取含公司名与多期营收的文本文件,将每行按分号拆分为结构化数据,计算各公司总营收,并准确返回营收最高的公司名称及数值。 在处理结构化文本数据(如以分号 ; 分隔的公司营收记录)时,关键在于正确解析每行、分离元数据(公司名)与数值数据(各期营收),并进行聚合...

如何从分号分隔的文本文件中提取公司名称与营收数据并找出总营收最高的公司

本文详解如何解析含公司名和多期营收的分号分隔文本文件,将每行拆分为公司名与数字列表,计算各公司总营收,并准确返回最高营收公司及其总额。 本文详解如何解析含公司名和多期营收的分号分隔文本文件,将每行拆分为公司名与数字列表,计算各公司总营收,并准确返回最高营收公司及其总额。 在处理结构化文本数据(如每行代表一家公司、字段以分号;分隔)时,关键在于正确拆分、类型转换与聚合计算。原始问题中,输入文件每行格...

JavaScript:动态生成表格并计算列总和

本文档旨在指导初学者使用 JavaScript 动态生成 HTML 表格,并计算每列的总和,最后将总和添加到表格的底部作为新的一行。通过本文,你将学习如何使用 JavaScript 操作 DOM 元素,创建表格,以及进行简单的数值计算。 动态生成表格并计算列总和 在 Web 开发中,经常需要动态生成表格并进行一些计算。本教程将演示如何使用 JavaScript 创建一个表格,该表格根据用户输入的数...

使用 JavaScript 在表格中添加列总和行

本文将指导你如何使用 JavaScript 动态生成 HTML 表格,并在表格底部添加一行,用于显示每一列的总和。通过修改现有的表格生成函数,我们将在循环中计算每一列的总和,并在表格生成完毕后,将总和添加到表格的最后一行。 计算并显示表格列总和 首先,我们需要修改现有的 tablica() 函数,以便在生成表格的同时计算每一列的总和。我们将创建三个变量 sum1、sum2 和 sum3 来分别存储...