
本文介绍如何使用 php 读取多行文本文件,将每行按空格拆分为独立单词,并统一输出所有单词(含数字、符号、字母),支持跳过空行和多余空白,适用于气象数据、日志解析等结构化文本处理场景。
本文介绍如何使用 php 读取多行文本文件,将每行按空格拆分为独立单词,并统一输出所有单词(含数字、符号、字母),支持跳过空行和多余空白,适用于气象数据、日志解析等结构化文本处理场景。
在处理如热带气旋报文、气象观测记录等结构化纯文本时(例如 sh22022 HALIMA 20220329 1200 -21.4 82.5 S TS 45 994),常需将整段内容精确切分为原子级字段(即每个空格分隔的“词”),而非仅按行处理。原代码仅用 explode("\n", ...) 拆分为行数组,未进一步按词解析,因此无法直接 echo 单个字段。
正确做法是:先按行分割 → 过滤空行 → 合并为单字符串 → 再按空格全局拆分 → 过滤空白元素。该流程可稳健应对多空格、首尾空格、空行等常见文本噪声。
以下是完整、健壮的实现示例:
<?php
// 1. 安全读取文件(添加错误检查更佳)
$file_content = file_get_contents('./cache/data.txt');
if ($file_content === false) {
die('Error: Unable to read file.');
}
// 2. 按换行符分割成行,过滤空行(trim + empty 检查)
$lines = array_filter(
array_map('trim', explode("\n", $file_content)),
function($line) { return $line !== ''; }
);
// 3. 将所有有效行用单个空格连接,再按空格拆分(自动压缩连续空格)
$all_words = array_filter(
explode(' ', implode(' ', $lines)),
function($word) { return trim($word) !== ''; }
);
// 4. 逐个输出每个词(带换行,符合预期格式)
foreach ($all_words as $word) {
echo htmlspecialchars($word) . "\n";
}
?>✅ 关键优化说明:
立即学习“PHP免费学习笔记(深入)”;
- 使用 array_map('trim', ...) 预处理每行,消除行首尾空格;
- array_filter(..., fn($l) => $l !== '') 精确剔除空行(比仅用 array_filter(explode()) 更可靠);
- implode(' ', $lines) 将各行拼接为单字符串时,天然将换行与空格统一为“空格分隔”,避免因 \t 或多空格导致的拆分异常;
- 最终 explode(' ', ...) + 二次 array_filter 可彻底排除空字符串,确保每个 $word 均为有效字段;
- htmlspecialchars() 用于安全输出,防止 XSS(若内容可能含 HTML 特殊字符)。
⚠️ 注意事项:
- 若字段本身含空格(如人名 "ALAN JONES"),此方法会错误拆分——此时应改用正则 preg_split('/\s+/', $line, -1, PREG_SPLIT_NO_EMPTY) 或固定列宽解析;
- 大文件请改用 fgets() 流式处理,避免内存溢出;
- 生产环境务必校验文件路径、权限及编码(推荐 UTF-8)。
通过该方案,原始两行数据将精准输出为 20 个独立字段(每行 10 个词),完全匹配目标格式,且具备良好的鲁棒性与可维护性。



















