Php 如何在循环输出之前打印for循环的计时?

Php 如何在循环输出之前打印for循环的计时?,php,microtime,Php,Microtime,我不知道标题是否正确,无论如何,我需要的是: 这是我的代码: $start = microtime(); $string = $_POST['string']; $matches = $SQL->prepare("SELECT * FROM `users` WHERE `name` LIKE ?"); $matches->execute(array('%'.$string.'%')); echo "Done in: " . round($_GLOBALS['time'], 4);

我不知道标题是否正确,无论如何,我需要的是:

这是我的代码:

$start = microtime();
$string = $_POST['string'];
$matches = $SQL->prepare("SELECT * FROM `users` WHERE `name` LIKE ?");
$matches->execute(array('%'.$string.'%'));

echo "Done in: " . round($_GLOBALS['time'], 4);
foreach($matches->fetchAll() as $match) {
    [..]
}
$end = microtime();
$time = $end - $start;
如您所见,我正在测量查询的时间并显示记录,microtime需要位于foreach的底部,但我需要在foreach之前显示测量的time$time变量。如您所见,我尝试过这样做:echo Done in:。四舍五入$GLOBALS['time'],4;但它总是返回0 null


我该怎么办呢?

你不能在出发前用微时间计算时间吗?e、 g

$start = microtime();
$string = $_POST['string'];
$matches = $SQL->prepare("SELECT * FROM `users` WHERE `name` LIKE ?");
$matches->execute(array('%'.$string.'%'));

echo "Done in: " . (microtime() - $start);
foreach($matches->fetchAll() as $match) {
    [..]
}
$end = microtime();
$time = $end - $start;

你应该这样做:

$start = microtime(true);
$string = $_POST['string'];
$matches = $SQL->prepare("SELECT * FROM `users` WHERE `name` LIKE ?");
$matches->execute(array('%'.$string.'%'));

$output = '';
foreach($matches->fetchAll() as $match) {
    $output .= $someText;
    [...]
}

$end = microtime(true);
$time = $end - $start;
echo "Done in: " . round($time, 4);
echo $output;
另外,请注意,我使用了可选参数true,因为它将时间作为十进制数返回,而不是作为两部分返回。

afuzzyllama的答案是使用变量的一种方法。您还可以捕获foreach循环,回显时间,然后从缓冲区输出:

$start = microtime();
$string = $_POST['string'];
$matches = $SQL->prepare("SELECT * FROM `users` WHERE `name` LIKE ?");
$matches->execute(array('%'.$string.'%'));

ob_start();
foreach($matches->fetchAll() as $match) {
    [..]
}
$table = ob_get_contents();
ob_end_clean();

$end = microtime();
$time = $end - $start;
echo "Done in: " . round($GLOBALS['time'], 4);
echo $table;

另外,我不知道您为什么在这里使用$GLOBALS['time'.

到目前为止,PHP中不允许时间旅行。对不起,我真的不明白您想要实现什么。您希望在foreach之前显示查询执行的时间,在foreach之后也显示记录的时间?为什么需要在循环之前打印donein语句。这个问题毫无意义。在执行上述操作之前,您可能无法计算执行该操作所需的时间。@JaredFarrish,因为在循环之后,会有很多表行,用户必须向下滚动才能查看执行时间。这就是为什么我希望它被放在页面的顶部。这不会给你运行foreach所需的时间。这也会测量循环时间吗?在它当前的形式下不会。我显然误解了这个问题。关于希望在foreach之前显示done in的部分,我认为这意味着@Rym希望在执行循环之前显示SQL查询时间,然后在foreach循环结束后显示总时间;提供此外,Done in行中存在语法错误。它允许您缓冲输出,以便以后可以回显。看来他很在乎订单。啊,没关系。我没看到你在用它。是的,这实际上就是OP所寻找的。$\u GLOBALS不存在。它是