<?php
$urls = array(
'us/1',
'us/2',
'gb/1',
'gb/2',
'de/1',
'de/2',
);
$current_country = '';
foreach ($urls as $url) {
$sleep_sec = rand(1, 3);
printf('Proccessed url <b>%s</b> in %s sec%s', strtoupper($url), $sleep_sec, '<br/>');
$country = substr($url, 0, 2);
if ($current_country !== $country) {
$start_at = microtime(true);
$end_at = microtime(true) - $start_at;
$logs[] = sprintf('Proccessed country <b>%s</b> in %s sec', strtoupper($country), $end_at);
}
$current_country = $country;
sleep($sleep_sec);
}
echo str_repeat('<br>', 2);
foreach($logs as $log) {
echo $log;
echo '<br>';
}
Now result is:
Proccessed url US/1 in 2 sec
Proccessed url US/2 in 2 sec
Proccessed url GB/1 in 1 sec
Proccessed url GB/2 in 2 sec
Proccessed url DE/1 in 3 sec
Proccessed url DE/2 in 2 sec
Proccessed country US in 1.9073486328125E-6 sec
Proccessed country GB in 2.1457672119141E-6 sec
Proccessed country DE in 5.0067901611328E-6 sec
Expected result:
Proccessed country US in 4 sec
Proccessed country GB in 3 sec
Proccessed country DE in 5 sec
How to count correct execution time for each country ?
Move your lines of code around so they actually make sense:
$start_at = microtime(true);
foreach ($urls as $url) {
$sleep_sec = rand(1, 3);
sleep($sleep_sec);
printf('Proccessed url <b>%s</b> in %s sec%s', strtoupper($url), $sleep_sec, '<br/>');
$country = substr($url, 0, 2);
$current_country = $country;
if ($current_country !== $country) {
$end_at = microtime(true) - $start_at;
$logs[] = sprintf('Proccessed country <b>%s</b> in %s sec', strtoupper($country), $end_at);
$start_at = microtime(true);
}
}