nickbeen/php-cli-progress-bar

用于在 PHP CLI 脚本中创建最小化的进度条

1.1.2 2024-06-20 17:04 UTC

This package is auto-updated.

Last update: 2024-09-20 17:37:48 UTC


README

Latest version Build status Total downloads PHP Version License

用于在 PHP CLI 脚本中创建最小化的进度条。它没有依赖项,但需要 PHP 8.0 或更高版本。这个库主要用于迭代计数变量,但也易于与结构化较差的逐步脚本一起使用。

过去已经编写了许多 PHP CLI 进度条,但其中大多数已经多年没有更新。这个库使用了最新的 PHP 功能,例如返回类型、命名参数和构造函数属性提升。要创建更丰富、更可定制的进度条,请查看 symfony/console 包中包含的进度条助手等替代方案。

要求

  • PHP 8.0 或更高版本

安装

使用 Composer 将库安装到您的项目中。

composer require nickbeen/php-cli-progress-bar

用法

使用这个库,您可以在 PHP CLI 脚本中显示进度条,以指示脚本正在执行其工作以及它已经进展到什么程度。您需要做的就是开始显示进度条,遍历脚本经过的步骤,并完成进度条的显示。

  1/100 [#...........................]   1% (00:00:16)
 64/100 [##################..........]  64% (00:00:07)
100/100 [############################] 100%

手动推进

当脚本中的步骤无法循环时,可以手动遍历脚本中的步骤。每次点击增加一次进度,但您可以通过在 tick() 中包含一个整数来覆盖所做的进度。

您需要为进度条设置 maxProgress 以通过在构造函数中包含它来正确显示数字。如果您在初始化期间不知道 maxProgress,您可以使用 setMaxProgress() 方法稍后设置它。

$progressBar = new \NickBeen\ProgressBar\ProgressBar(maxProgress: 62);
$progressBar->start();

doSomething();
$progressBar->tick();

doSomethingElse();
$progressBar->tick();

doSixtyTasks();
$progressBar->tick(60);

$progressBar->finish();

如果您在逐步代码中有更多的结构,您可以将 tick() 放入 for 循环中。然而,在处理例如数组等时,有一个更方便的方法。

遍历数组或可遍历实例

此类方法与任何伪类型 iterable 一起工作,包括任何数组或任何 Traversable 实例。iterate() 方法自动处理启动进度条、管理遍历迭代以及最终完成显示进度条。

$array = [
    1 => 'A',
    2 => 'B',
    3 => 'C',
];

$progressBar = new \NickBeen\ProgressBar\ProgressBar();

foreach ($progressBar->iterate($array as $key => $value);) {
    echo "$key: $value" . PHP_EOL;
}

与进度条交互

在进度条运行期间可以与之交互。您可以检索完成所需的时间、已完成的进度、已设置的进度最大值和完成百分比。您可以使用这些信息进行例如通知或其他后台任务。

foreach ($progressBar->iterate($array);) {
    // Some custom notification
    sendToDiscord($progressBar->getEstimatedTime());

    // Some custom task application
    syncWithCloud($progressBar->getPercentage())

    // Some other custom application
    sendToRaspberryPiDisplay($progressBar->getProgress(), $progressBar->getMaxProgress())
}

许可

本库采用 MIT 许可证(MIT)授权。有关详细信息,请参阅 LICENSE