
本文介绍如何将竖线分隔的文本文件读取为二维数组后,使用 usort() 按第三列(类别)升序排序,并渲染为 HTML 表格,确保同类数据连续显示。
本文介绍如何将竖线分隔的文本文件读取为二维数组后,使用 `usort()` 按第三列(类别)升序排序,并渲染为 html 表格,确保同类数据连续显示。
在处理结构化文本数据(如 || 分隔的 CSV-like 文件)时,直接在 foreach 循环中调用 sort() 是无效的——因为 sort() 作用于一维数组,而循环中每次仅处理单行字符串。正确做法是:先完整解析所有行,构建成二维数组;再统一排序;最后遍历输出。
以下是推荐的完整实现方案:
<?php // 1. 读取文件并去除每行末尾换行符
$lines = file("myfile.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// 2. 解析每一行为 [id, text, category] 的子数组
$records = [];
foreach ($lines as $line) {
$parts = explode('||', $line);
// 确保至少有3个字段,避免索引越界(可选健壮性处理)
if (count($parts) >= 3) {
$records[] = [
trim($parts[0]),
trim($parts[1]),
trim($parts[2])
];
}
}
// 3. 使用 usort 按第三字段(category)升序排序(PHP 7.4+ 支持箭头函数)
usort($records, fn($a, $b) => $a[2] $b[2]);
// 4. 渲染 HTML 表格
?>
| ID | TEXT | CATEGORY |
|---|---|---|
| = htmlspecialchars($row[0]) ?> | = htmlspecialchars($row[1]) ?> | = htmlspecialchars($row[2]) ?> |
✅ 关键要点说明:
- file() 默认保留换行符,建议加上 FILE_IGNORE_NEW_LINES 标志避免 category A\n 类脏数据;
- 使用 usort() 配合太空船操作符 实现自然、稳定、可读性强的字符串比较;
- 输出前务必使用 htmlspecialchars() 防止 XSS(尤其当 text 字段含 HTML 特殊字符时);
- 若需按类别分组显示(如加标题
Category A
),可在排序后使用 array_reduce() 或 foreach + 状态跟踪实现分组渲染; - 如需降序,将 $a[2] $b[2] 改为 $b[2] $a[2] 即可。
该方法逻辑清晰、性能高效,适用于中小规模文本数据(万行以内),是 PHP 原生处理此类排序任务的标准实践。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











