Полезно при выполнении скрипта в консоли, для оценки оставшегося времени выполнения цикла. Например, вы скачиваете файлы более-менее одинакового размера, или череду вызовов какого-нибудь удалённого API. Итоговое количество файлов или вызовов должно быть известно. Тогда вы передаете в эту функцию итоговое число итераций и номер текущей итерации, в ответ - примерное число оставшихся секунд. PHP: /** * @author Vasilii B. Shpilchin * @staticvar array $stamps Timestamps * @param int $total Number of items * @param int $current Current item number * @param int $span Number of timestamps for calculating * @return int Number of estimate seconds */ function estimateTime ($total, $current, $span = 10) { static $stamps = []; $now = microtime(1); $stamps[] = $now; if (count($stamps) < $span + 1) { return '...'; } $first = array_shift($stamps); $stamps = array_values($stamps); return ceil(($total - $current) * (($now - $first) / ($span + 1))); } тест PHP: for ($i = 0; $i < 15; $i++) { echo estimateTime(15, $i, 3), "<br>\r\n"; usleep(mt_rand(100000, 1500000)); } Код (Text): ... ... ... 9 7 6 6 5 5 3 3 3 3 2 1
@[vs] эммм а если я во на середине запущу торрент? в результате результат будет не верен. полагаю что скорость нужно высчитывать почаще...
@abrdabr если включешь торрент, то предполагаемое время вырастет, потому что скорость рассчитывается по последним нескольким итерациями (аргумент $span). Это предусмотрено.