colbygatte / smart-csv
简单的CSV操作。
v0.0.10
2017-09-05 19:28 UTC
Requires (Dev)
- fzaninotto/faker: ^1.6
- phpunit/phpunit: ^6.2
- symfony/var-dumper: 3.3.0
README
文件: people.csv
name,age,address,Favorite Type Of Food,attribute 1,value 1,note 1,attribute 2,value 2,note 2
Colby,26,1234 Country Lane,burgers,hair color,brown,nil,height,6,so tall
Mark,28,4321 City Street,ramen,shoe size,9,big foot!,height,5'9'',so short
Tammy,29,2314 Bayou Road,steak,pant size,4,nil,ring size,7,beautiful!
辅助函数概述
csv()
- 用于创建CSV。接受一个参数:表头。csv_sip()
- 逐行读取CSV。接受一个参数:文件路径或文件句柄csv_slurp()
- 一次性将整个CSV读入内存。接受一个参数:文件路径或文件句柄csv_writer()
csv_alter()
基本用法
使用 csv()
创建新的CSV
<?php $csv = csv(['name', 'age']); $csv->append(['Mark', 28], ['Colby', 26]) // Multiple rows can be passed at once ->write('info.csv');
csv_sip()
将逐行读取CSV文件(不是逐行 - CSV的单行可以跨越多行)
<?php foreach (csv_sip('people.csv') as $row) { echo $row->name; }
csv_slurp()
将一次性读取整个CSV文件
<?php $csv = csv_slurp('people.csv'); foreach ($csv as $row) { echo $row->age; }
csv_writer()
用于直接写入CSV文件。
<?php $writer = csv_writer('data.csv', ['time', 'cost']); $writer->append(['4pm', '$100'], ['1am', '$14']); // Append automatically writes each row
csv_alter()
使用Sip迭代每一列,并在迭代后,将列写入新的CSV。这允许在不更改源文件的情况下轻松进行数据处理。
<?php $alter = csv_alter('people.csv', 'altered-people.csv'); foreach ($alter as $row) { // Change stuff $row->name = strtoupper($row->name); // If the delete() method is called on the row, it will not be included in the new CSV $row->delete(); }
列分组
列分组通过匹配表头结束来实现。例如,attribute 1
和 value 1
是匹配的,因为它们都以相同的字符串结尾,即 ' 1'
。这不是匹配数字,而是匹配从 attribute
和 value
之后整个剩余的字符串。
<?php $csv = csv_sip('people.csv')->makeGroup('attributes', 'attribute', ['value', 'note']); foreach ($csv as $row) { print_r($row->groups()->attributes); }
输出(第一个值)
Array
(
[0] => Array
(
[attribute] => hair color
[value] => brown
[note] => nil
)
[1] => Array
(
[attribute] => height
[value] => 6
[note] => so tall
)
)