Как мне распечатать время цикла for перед выводом цикла? - PullRequest
0 голосов
/ 09 октября 2011

Я не знаю, правильное ли название, в любом случае вот что мне нужно:

Это мой код:

$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 (ноль).

Что мне делать?

Ответы [ 3 ]

1 голос
/ 09 октября 2011

Вы должны сделать что-то вроде этого:

$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, потому что он возвращает время в виде десятичного числа вместо двух частей, поскольку документация сообщает .

0 голосов
/ 09 октября 2011

afuzzyllama ответ является одним из способов использования переменной. Вы также можете захватить вывод цикла 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'] здесь.

0 голосов
/ 09 октября 2011

Разве вы не можете просто посчитать время, используя микротайм, перед foreach?например,

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