0

0

PHP怎样修改文件行顺序_PHP改文件行顺序法【排序】

絕刀狂花

絕刀狂花

发布时间:2026-02-10 09:12:10

|

534人浏览过

|

来源于php中文网

原创

直接读取+重排+写入最稳妥:PHP无原生就地排序函数,file()+usort()适合中小文件,需用FILE_IGNORE_NEW_LINES等标志;大文件应流式处理或调用系统sort命令。

php怎样修改文件行顺序_php改文件行顺序法【排序】

直接读取+重排+写入是最稳妥的做法

PHP 没有原生“就地修改文件行顺序”的函数,fgets()file() 读出来的是数组,排序必须在内存中完成,再用 file_put_contents() 覆盖写回。试图用 fseek() + fwrite() 手动挪动行位置极易出错——换行符长度不一致(\n vs \r\n)、编码空格、BOM 头都会导致偏移错乱。

file() + usort() 是最常用组合

适用于中小文件(几百 MB 以内),代码简洁且可控。注意默认 file() 会保留换行符,排序后若需保持格式统一,建议先 rtrim() 再排序,最后手动补 \n

$lines = file('data.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
usort($lines, function($a, $b) {
    return strcmp($a, $b); // 字典序
    // 或 intval($a) <=> intval($b); // 数值序(PHP 7+)
});
file_put_contents('data.txt', implode("\n", $lines) . "\n");
  • FILE_IGNORE_NEW_LINES 避免每行末尾带 \n 干扰比较
  • FILE_SKIP_EMPTY_LINES 过滤空行,防止 strcmp('', 'xxx') 返回意外结果
  • 数值排序别直接用 sort($lines, SORT_NUMERIC) —— 它对字符串数字(如 "10")排序不稳定,usort + 强制转换更可靠

大文件慎用 file(),改用流式逐行读取+临时文件

超过 500MB 的文件,file() 可能触发内存耗尽(Allowed memory size exhausted)。此时应放弃一次性加载,改用 fopen() + fgets() 流式读取,把行内容和原始位置(或哈希)存到外部索引(如 SQLite 或临时 CSV),排序后再按序读取源文件写入新文件:

露阳PHP企业系统1.0
露阳PHP企业系统1.0

1.) 将所有文件解压到php环境中,本程序才用smarty+php+mysql设计。如果运行不了,请修改hhy文件夹下的smarty.php文件改法请看说明2.) 修改configs下的config.inc.php下的连接数据库的密码和用户名3.) 本程序没有做安全页面,人工导入sql.inc到mysql数据库。管理员初始化帐号为admin,密码为hhy。后台地址:http://你的网站地址/h

下载
$fp = fopen('big.txt', 'r');
$tempLines = [];
while (($line = fgets($fp)) !== false) {
    $tempLines[] = rtrim($line, "\r\n");
}
fclose($fp);
// 排序...
file_put_contents('big_sorted.txt', implode("\n", $tempLines) . "\n");
  • 虽然仍全量载入内存,但至少避免了 file() 自动加 \n 的副作用
  • 真超大文件(GB 级)需配合外部排序工具(如系统 sort 命令),PHP 只做调度:exec('sort -o sorted.txt big.txt');
  • 注意 fgets() 在 Windows 下对 \r\n 的处理比 file() 更干净,不易多出空行

按某列排序(如 CSV 第三列)要先解析再比

直接对 CSV 行字符串排序会出错(比如按字典序排数字列,“100” 会排在 “2” 前面)。必须用 str_getcsv() 拆解,提取目标字段再比较:

立即学习PHP免费学习笔记(深入)”;

$lines = file('data.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
usort($lines, function($a, $b) {
    $aCols = str_getcsv($a);
    $bCols = str_getcsv($b);
    return $aCols[2] <=> $bCols[2]; // 按第3列(索引2)数值排序
});
file_put_contents('data.csv', implode("\n", $lines) . "\n");
  • str_getcsv() 自动处理带引号、逗号转义的 CSV,比 explode(',', $line) 安全得多
  • 若列含空值,$aCols[2] 可能未定义,建议加 ?? ''array_key_exists(2, $aCols) 判断
  • UTF-8 编码下,str_getcsv() 默认按字节解析,遇到多字节字符(如中文)一般没问题;但若 CSV 用 BOM 开头,file() 读出的首行可能含 \xEF\xBB\xBF,需提前 ltrim($line, "\xEF\xBB\xBF")
实际改行序最常卡在换行符不一致和 CSV 字段嵌套上,这两处不处理,排序结果看着正常,一导入 Excel 就错位。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

399

2023.09.04

fgets在c语言中的用法
fgets在c语言中的用法

本专题整合了c语言中fgets用法介绍,阅读专题下面的文章了解更多详细内容。

16

2025.08.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

488

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

214

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1547

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

637

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

841

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

813

2024.04.29

Rust异步编程与Tokio运行时实战
Rust异步编程与Tokio运行时实战

本专题聚焦 Rust 语言的异步编程模型,深入讲解 async/await 机制与 Tokio 运行时的核心原理。内容包括异步任务调度、Future 执行模型、并发安全、网络 IO 编程以及高并发场景下的性能优化。通过实战示例,帮助开发者使用 Rust 构建高性能、低延迟的后端服务与网络应用。

1

2026.02.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.5万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号