您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# PHP如何逐行把整个文件数据存入数组中
## 前言
在PHP开发中,经常需要处理文件数据。将文件内容逐行读取并存入数组是一个常见需求,比如处理日志文件、CSV数据或配置文件等。本文将详细介绍5种实现方式,并分析它们的性能差异和适用场景。
## 方法一:使用file()函数
### 基本用法
```php
$lines = file('data.txt');
print_r($lines);
$lines = file('data.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
参数 | 说明 |
---|---|
FILE_IGNORE_NEW_LINES | 忽略每行末尾的换行符 |
FILE_SKIP_EMPTY_LINES | 跳过空行 |
$handle = fopen('data.txt', 'r');
$lines = [];
while (!feof($handle)) {
$lines[] = fgets($handle);
}
fclose($handle);
$lines = [];
if ($handle = fopen('largefile.txt', 'r')) {
while (($line = fgets($handle)) !== false) {
$lines[] = rtrim($line, "\r\n");
}
fclose($handle);
}
$file = new SplFileObject('data.txt');
$lines = [];
foreach ($file as $line) {
$lines[] = $line;
}
$file = new SplFileObject('data.csv');
$file->setFlags(SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY);
$lines = iterator_to_array($file);
function readLargeFile($filename) {
$file = fopen($filename, 'r');
while (!feof($file)) {
yield fgets($file);
}
fclose($file);
}
foreach (readLargeFile('huge.log') as $line) {
// 处理每行数据
}
$handle = fopen('data.txt', 'r');
$lines = [];
while ($line = stream_get_line($handle, 1024, "\n")) {
$lines[] = $line;
}
fclose($handle);
$start = microtime(true);
// 测试代码
$end = microtime(true);
echo "耗时: ".($end-$start)."秒\n";
方法 | 耗时(秒) | 内存峰值(MB) |
---|---|---|
file() | 0.12 | 10.5 |
fgets() | 0.15 | 1.2 |
SplFileObject | 0.18 | 1.3 |
生成器 | 0.14 | 0.8 |
stream_get_line | 0.16 | 1.1 |
file()
函数
$lines = preg_split('/\r\n|\r|\n/', file_get_contents('file.txt'));
$lines = array_filter(file('file.txt'), 'trim');
A: 这是PHP的默认行为,可以使用FILE_IGNORE_NEW_LINES
参数或array_map('trim', $lines)
处理
A: 推荐使用生成器或逐行读取处理,不要一次性存储全部内容
$lines = [];
foreach (file('file.txt') as $num => $line) {
$lines[$num+1] = $line; // 行号从1开始
}
$csv = array_map('str_getcsv', file('data.csv'));
$lines = json_decode(file_get_contents('data.json'), true);
$logEntries = array_filter(file('app.log'), function($line) {
return strpos($line, 'ERROR') !== false;
});
本文介绍了5种PHP逐行读取文件到数组的方法,各有优缺点:
file()
- 最简单但内存占用高fgets()
- 平衡性好,可控性强SplFileObject
- 面向对象风格stream_get_line()
- 最灵活根据实际场景选择合适的方法,小文件追求简洁可用file()
,大文件应考虑内存使用选择生成器或fgets()
方案。
“`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。