nickbeen / php-cli-progress-bar
用于在 PHP CLI 脚本中创建最小化的进度条
Requires
- php: ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.5
README
用于在 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。