
本文详解如何使用 php 读取多行文本文件,将其按空格分割为独立单词,并以清晰格式逐行输出,适用于气象数据、日志解析等结构化文本处理场景。
本文详解如何使用 php 读取多行文本文件,将其按空格分割为独立单词,并以清晰格式逐行输出,适用于气象数据、日志解析等结构化文本处理场景。
在实际开发中,我们常需解析类似气象报文、日志记录等以空格分隔的多行纯文本数据。例如以下 data.txt 文件内容:
sh222022 HALIMA 20220329 1200 -21.4 82.5 S TS 45 994 wp932022 INVEST 20220329 1200 11.1 115.7 W DB 20 1008
目标是将全部单词(共 20 个)按顺序逐行输出,而非按行分组——即忽略换行边界,统一按空格切分所有有效字段。
✅ 正确实现步骤
- 读取文件内容:使用 file_get_contents() 获取原始字符串;
- 按行拆分并过滤空行:用 explode("\n", ...) 得到行数组,再用 array_filter() 剔除空白行(避免后续产生空元素);
- 合并为单字符串:implode(' ', $lines) 将所有非空行用单空格连接;
- 全局按空格切分:再次 explode(' ', ...) 并 array_filter() 清理可能残留的空字符串(如连续空格导致);
- 逐行输出:遍历最终单词数组,使用 echo $word . PHP_EOL 或 <br> 实现换行显示。
? 完整可运行代码示例
<?php
// 1. 读取文件(注意:FILE_IGNORE_NEW_LINES 在 file_get_contents 中无效,仅对 file() 生效)
$file_content = file_get_contents('./cache/data.txt');
// 2. 按换行符拆分,并过滤掉空行
$lines = array_filter(explode("\n", $file_content), 'trim');
// 3. 合并所有行为单个字符串(用空格连接)
$all_words_string = implode(' ', $lines);
// 4. 全局按空格分割,并严格过滤空值(处理首尾/连续空格)
$words = array_filter(explode(' ', $all_words_string), 'trim');
// 5. 逐行输出每个单词(命令行环境用 \n;Web 环境可用 <br>)
foreach ($words as $word) {
echo htmlspecialchars($word) . "\n"; // 安全输出,防 XSS(若用于 HTML 页面,请替换为 <br>)
}
?>? 关键说明:
- FILE_IGNORE_NEW_LINES 对 file_get_contents() 无作用(该标志仅用于 file() 函数),故直接忽略即可;
- 必须两次 array_filter():第一次去空行,第二次去空字段(因 explode(' ', "a b") 会产生 ['a', '', 'b']);
- 推荐使用 trim 作为回调函数(比默认过滤更健壮),确保两端空白和纯空格字符串均被剔除;
- htmlspecialchars() 是 Web 输出时的必备防护,避免特殊字符引发 HTML 解析错误或 XSS 风险。
? 扩展建议(进阶用法)
- 若字段间存在制表符或多个空格,推荐改用正则分割:
$words = preg_split('/\s+/', trim($file_content), -1, PREG_SPLIT_NO_EMPTY); - 如需保留原始行列结构(例如第1行第3列),应先按行 explode("\n"),再对每行 explode(' '),构建二维数组;
- 处理大文件时,避免 file_get_contents() 加载全部内容到内存,可改用 fopen() + fgets() 流式读取。
通过以上方法,你不仅能精准提取每个单词,还能灵活适配不同空白分隔模式与安全输出需求,真正掌握结构化文本解析的核心技巧。
立即学习“PHP免费学习笔记(深入)”;











