分组期间的脚本执行时间

<?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);
    }
}