我想知道执行一个PHP for循环需要多少毫秒。

我知道一个泛型算法的结构,但不知道如何在PHP中实现它:

Begin
init1 = timer(); // where timer() is the amount of milliseconds from midnight
the loop begin
some code
the loop end
total = timer() - init1;
End

当前回答

你可以使用微时间功能。从文档中可以看到:

microtime -以微秒为单位返回当前Unix时间戳 如果get_as_float被设置为TRUE,则microtime()返回一个浮点数,它表示当前时间(以秒为单位),从Unix纪元开始精确到最近的微秒。

使用示例:

$start = microtime(true);
while (...) {

}
$time_elapsed_secs = microtime(true) - $start;

其他回答

这里有一个非常简单而简短的方法

<?php
$time_start = microtime(true);
//the loop begin
//some code
//the loop end
$time_end = microtime(true);
$total_time = $time_end - $time_start;
echo $total_time; // or whatever u want to do with the time
?>

这里有一个函数,可以计时PHP代码的任何部分的执行,很像Python的timeit模块:https://gist.github.com/flaviovs/35aab0e85852e548a60a

如何使用:

include('timeit.php');
const SOME_CODE = '
        strlen("foo bar");
';
$t = timeit(SOME_CODE);
print "$t[0] loops; $t[2] per loop\n";

结果:

$ php x.php 
100000 loops; 18.08us per loop

免责声明:我是本文主旨的作者

EDIT: timeit现在是https://github.com/flaviovs/timeit上一个独立的、独立的项目

这样会更清楚

<?php

$start = hrtime(true);

while (...) {
}

$duration = hrtime(true) - $start;
echo  $duration * 1000 ." -> microseconds". PHP_EOL; 
echo  $duration * 1000000 ." -> milliseconds". PHP_EOL; 
echo  $duration * 1e6 ." -> milliseconds". PHP_EOL; 

结果

37180000 -> microseconds
37180000000 -> milliseconds
37180000000 -> milliseconds

您可以使用$_SERVER超全局数组中的REQUEST_TIME。从文档中可以看到:

REQUEST_TIME 请求开始的时间戳。(自PHP 5.1.0起可用。) REQUEST_TIME_FLOAT 请求开始的时间戳,具有微秒精度。(自PHP 5.4.0起可用。)

这样就不需要在脚本的开头保存时间戳。你可以简单地做:

<?php
// Do stuff
usleep(mt_rand(100, 10000));

// At the end of your script
$time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];

echo "Did stuff in $time seconds\n";
?>

在这里,$time将包含自脚本开始以来所经过的时间,以秒为单位,具有微秒精度(例如。1.341为1秒和341微秒)


更多信息:

PHP文档:$_SERVER变量和microtime函数

你可以通过以下方式使用微时间(true):

把这个放在你的php文件的开头:

//place this before any script you want to calculate time
$time_start = microtime(true);

//你的脚本代码在这里

// do something

把这个放在你的php文件的末尾:

// Display Script End time
$time_end = microtime(true);

//dividing with 60 will give the execution time in minutes other wise seconds
$execution_time = ($time_end - $time_start)/60;

//execution time of the script
echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';

它将在几分钟内输出结果。