PHP code example of nalabdou / algebra-csv

1. Go to this page and download the library: Download nalabdou/algebra-csv library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

nalabdou / algebra-csv example snippets


use Nalabdou\Algebra\Algebra;
use Nalabdou\Algebra\Csv\CsvFileAdapter;
use Nalabdou\Algebra\Csv\ValueObject\CsvOptions;

Algebra::adapters()->register(CsvFileAdapter::from(new CsvOptions(coerceTypes: true)), priority: 100);

$result = Algebra::from('/data/orders.csv')
    ->where("item['status'] == 'paid'")
    ->groupBy('region')
    ->aggregate(['revenue' => 'sum(amount)', 'orders' => 'count(*)'])
    ->orderBy('revenue', 'desc')
    ->toArray();

use Nalabdou\Algebra\Algebra;
use Nalabdou\Algebra\Csv\CsvStringAdapter;
use Nalabdou\Algebra\Csv\ValueObject\CsvOptions;
use Nalabdou\Algebra\Csv\ValueObject\CsvString;

Algebra::adapters()->register(CsvStringAdapter::from(new CsvOptions()), priority: 90);

$csv = CsvString::from(
    "id,status,amount\n1,paid,100\n2,pending,200\n3,paid,300\n",
    new CsvOptions(coerceTypes: true),
);

$result = Algebra::from($csv)
    ->where("item['status'] == 'paid'")
    ->toArray();

use Nalabdou\Algebra\Algebra;
use Nalabdou\Algebra\Csv\CsvResourceAdapter;
use Nalabdou\Algebra\Csv\ValueObject\CsvOptions;

Algebra::adapters()->register(CsvResourceAdapter::from(new CsvOptions()), priority: 80);

$handle = fopen('/data/exports.csv', 'rb');

$result = Algebra::from($handle)
    ->tally('status')
    ->toArray();

fclose($handle); // caller owns the handle lifecycle

use Nalabdou\Algebra\Algebra;
use Nalabdou\Algebra\Csv\CsvFileAdapter;
use Nalabdou\Algebra\Csv\CsvStringAdapter;
use Nalabdou\Algebra\Csv\CsvResourceAdapter;
use Nalabdou\Algebra\Csv\ValueObject\CsvOptions;

Algebra::adapters()->register(CsvFileAdapter::from(new CsvOptions(coerceTypes: true)),  priority: 100);
Algebra::adapters()->register(CsvStringAdapter::from(new CsvOptions()),                  priority: 90);
Algebra::adapters()->register(CsvResourceAdapter::from(new CsvOptions()),                priority: 80);

$adapter = CsvFileAdapter::from(new CsvOptions(delimiter: ';', coerceTypes: true));

// Also valid — same result
$adapter = new CsvFileAdapter(new CsvOptions(delimiter: ';', coerceTypes: true));

$csv = CsvString::from("id,name\n1,Alice\n");

$csv = CsvString::from("id;name\n1;Alice\n", new CsvOptions(delimiter: ';'));

use Nalabdou\Algebra\Csv\ValueObject\CsvOptions;

$opts = new CsvOptions(
    delimiter:   null,         // null = auto-detect from [',', ';', "\t", '|']
    enclosure:   '"',          // field enclosure character
    escape:      '\\',         // escape character
    hasHeader:   true,         // first row = column names
    encoding:    null,         // null = UTF-8; set 'Windows-1252', 'ISO-8859-1', etc.
    skipEmpty:   false,        // skip rows where all cells are empty
    coerceTypes: false,        // convert '42' → 42, '1.5' → 1.5
);

$opts = (new CsvOptions())
    ->withDelimiter(';')
    ->withEncoding('Windows-1252')
    ->withTypeCoercion()
    ->withSkipEmpty();

Algebra::adapters()->register(CsvFileAdapter::from($opts), priority: 100);

Algebra::from('orders.csv')   // comma — auto-detected
Algebra::from('exports.csv')  // semicolon — auto-detected
Algebra::from('data.tsv')     // tab — auto-detected

Algebra::adapters()->register(
    CsvFileAdapter::from(new CsvOptions(encoding: 'Windows-1252')),
    priority: 100,
);

$result = Algebra::from('/data/french_export.csv')->toArray();
// All strings arrive as UTF-8

Algebra::adapters()->register(
    CsvFileAdapter::from(new CsvOptions(coerceTypes: true)),
    priority: 100,
);

// Without coercion:  $row['amount'] === '500'  (string)
// With coercion:     $row['amount'] === 500    (int)

use Nalabdou\Algebra\Csv\Contract\CsvAdapterInterface;

function registerAdapters(CsvAdapterInterface ...$adapters): void {
    foreach ($adapters as $priority => $adapter) {
        Algebra::adapters()->register($adapter, priority: $priority);
    }
}

use Nalabdou\AlgebraSymfony\Attribute\AsAlgebraAdapter;
use Nalabdou\Algebra\Csv\CsvFileAdapter;
use Nalabdou\Algebra\Csv\ValueObject\CsvOptions;

#[AsAlgebraAdapter(priority: 50)]
final class AppCsvAdapter extends CsvFileAdapter
{
    public function __construct()
    {
        parent::__construct(new CsvOptions(coerceTypes: true, skipEmpty: true));
    }
}