0

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

这是我的代码:

$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但我需要$time在 foreach 之前显示测量的时间(变量)。如您所见,我尝试这样做:echo "Done in: " . round($_GLOBALS['time'], 4);但它始终返回 0(null)。

我应该怎么办?

4

3 回答 3

1

你应该这样做:

$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;

另外,请注意我使用了可选参数 oftrue因为这将时间作为十进制数返回,而不是文档所述的两个部分。

于 2011-10-09T16:01:33.757 回答
0

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

$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']这里使用。

于 2011-10-09T16:09:55.907 回答
-1

你也不能在 foreach 之前使用 microtime 计算时间吗?例如

$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;
于 2011-10-09T15:59:52.263 回答