koriym/loop

将可迭代表据集(例如,数据库结果、CSV文件)转换为具有循环上下文(isFirst,isLast,index,iteration)的实体列表生成器。

1.0.0 2024-06-09 03:21 UTC

This package is auto-updated.

Last update: 2024-09-09 05:10:33 UTC


README

codecov Type Coverage Continuous Integration

Koriym.Loop 是一个 PHP 库,可以将各种可迭代表据集(如数据库结果集、CSV 文件或任何其他可迭代表结构)转换为实体列表生成器。这使它易于在视图中使用,通过提供 isFirst、isLast、index 和 iteration 等循环信息,类似于在模板引擎(如 Twig)中找到的循环处理。

安装

composer require koriym/loop

用法

基本示例

以下示例演示了如何使用 Koriym.Loop 与一个简单的 User 类和结果集一起使用

class User
{
    public function __construct(
        public readonly int $id,
        public readonly string $name
    ){}
}

// Database result sets or csv content
$resultSet = [ 
    ['id' => 1, 'name' => 'ray'],
    ['id' => 2, 'name' => 'bear'],
    ['id' => 3, 'name' => 'alps'],
];

/** @var Generator<Loop, User, mixed, void> $users */
$users = (new LoopGen)($resultSet, User::class);
foreach ($users as $user) {
    echo $user->name;
}

循环信息

可以从数组键访问循环信息,提供有关当前项是否为列表中的第一个或最后一个的详细信息

/** @var Loop $loop */
foreach ($users as $loop => $user) {
    echo match(true) {
        $loop->isFirst && $loop->isLast => "<ul><li>{$user->name}</ul>",
        $loop->isFirst => "<ul><li>{$user->name}",
        $loop->isLast => "<li>{$user->name}</ul>",
        default => "<li>{$user->name}"
    };
}

循环属性

注入

可以通过指定它们作为第三个参数将依赖实例注入到实体中。指定键为参数名称,值为实例。

$dependencies = [
    $varName => $insntance,
    'dateTime' => new DateTime(), // DateTime instance is injected
];
$users = (new LoopGen)($resultSet, User::class, $dependencies);

迭代器支持

Koriym.Loop 支持迭代器和数组。以下是一个使用 CSV 迭代器的示例

class Row
{
    public function __construct(
        public readonly int $id,
        public readonly string $name
    ){}
}

// Retrieve contents of csv file as list<Row>
$csvIterator = new ogrrd\CsvIterator\CsvIterator($csvFilePath);
/** @var list<Row> $csvRowList */
$csvRowList = (new LoopGen)($csvIterator, Row::class);

foreach ($csvRowList as $loop => $row) {
    if ($loop->isFirst) {
        continue; // Skip header
    }
    echo $row->name;
}

此库提供了一种灵活且方便的方法来处理 PHP 中的结果集和其他可迭代表结构,并提供了有关循环状态的额外上下文信息。