荷兰编码公司 / csv-collection
使用Laravel的Illuminate Collections读写大型CSV文件
1.3.0
2024-04-26 10:11 UTC
Requires
- php: ^7.4|^8.0
- illuminate/collections: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
README
此包提供了一种简单但功能强大的方法,利用Laravel的延迟集合功能来读取和写入大型CSV文件。
安装
您可以通过composer安装此包
composer require dutchcodingcompany/csv-collection
使用方法
您可以使用new关键字或make方法创建一个集合。
CsvCollection::make();
打开
要打开一个文件并将内容加载到新的集合中,您可以在集合上使用open方法。
use DutchCodingCompany\CsvCollection\CsvCollection; CsvCollection::make() ->open('path/to/file.csv') ->count();
保存
要保存集合项到文件,您可以在集合上使用save方法。
use DutchCodingCompany\CsvCollection\CsvCollection; CsvCollection::make(static function () { yield [ 'key' => 'value', ]; }) ->save('path/to/file.csv');
模型导出
在导出模型时,一种内存高效的方法是延迟遍历模型并yield其内容。
use DutchCodingCompany\CsvCollection\CsvCollection; CsvCollection::make(static function () { $models = Model::query()->lazy(); foreach ($models as $model){ yield $model->only([ 'id', // ]); } }) ->save('path/to/file.csv');
选项
以下选项可用于满足您的需求
header
,默认:true
delimiter
,默认:,
enclosure
,默认:"
escape
,默认:\\
这些选项可以作为参数传递给open和save方法,使用options方法设置,或使用静态方法defaults作为全局默认值。
您可以使用如下所示的detectDelimiter方法检测文件的分隔符
CsvCollection::detectDelimiter($path);
标题
当使用标题时,行将包含关联数组。否则,行将包含索引数组。
// Without header [ 0 => 'John', 1 => 'Doe', ] // With header [ 'first_name' => 'John', 'last_name' => 'Doe', ]
注意:当将集合保存到文件时,将使用集合中第一个元素的键作为标题。
测试
composer test
鸣谢
许可证
MIT许可证(MIT)。请参阅许可证文件获取更多信息。