koriym / loop
将可迭代表据集(例如,数据库结果、CSV文件)转换为具有循环上下文(isFirst,isLast,index,iteration)的实体列表生成器。
1.0.0
2024-06-09 03:21 UTC
Requires
- php: ^7.2 || ^8.0
Requires (Dev)
- bamarni/composer-bin-plugin: ^1.4
- phpunit/phpunit: ^8.5.24 || ^9.5
This package is auto-updated.
Last update: 2024-09-09 05:10:33 UTC
README
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 中的结果集和其他可迭代表结构,并提供了有关循环状态的额外上下文信息。