colbygatte/smart-csv

简单的CSV操作。

v0.0.10 2017-09-05 19:28 UTC

This package is auto-updated.

Last update: 2024-09-10 04:07:41 UTC


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 1value 1 是匹配的,因为它们都以相同的字符串结尾,即 ' 1'。这不是匹配数字,而是匹配从 attributevalue 之后整个剩余的字符串。

<?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
        )

)