1) из-за детализации таймера (как часто он обновляется) зацикливание указанного количества циклов НЕ является значимым способом сравнительного тестирования в PHP.
Подождите, пока таймер перевернется, а затем зациклите определенное количество итераций подсчета времени.
Хорошее практическое правило: каждый раз, когда вы видите, что в тесте используется «прошедшее время», а разница во времени измеряется менее десяти секунд, это неточная чушь.
2) Почему $a['green'] допустил ошибку в вашем первоначальном сообщении? О, это не так.
посмотри на это.
3) Эхо означает, что кэширование, работа в сети, буферизация памяти и целый ряд других факторов могут мешать, поэтому, возможно, вместо этого сделайте простое добавление?
Итак, давайте проведем ЗНАЧИМОЕ измерение вашего второго примера.
<?php
// error_reporting(0);
$test = [ 'red' => 255 ];
$count = 0;
$temp = microtime(true);
do { $end = microtime(true); } while ($end == $temp);
$end += 1; // 1 full second minimum
do {
$temp += $test['red'];
$count++;
} while (microtime(true) < $end);
echo '<br><br>Iterations (higher is better) :', $count, '<br>';
Код (разметка): На моем i7 4770k у меня получается более 10 проходов:
(помните, чем выше, тем лучше)
Действительно при включенной отчетности: от 15 698 688 до 15 702 565 итераций.
Действительно с отключенной отчетностью: от 15 078 511 до 15 124 391 итерации.
Недействительно при включенной отчетности: от 13 320 до 13 338 итераций (да, ошибки вывода)
Недействительно при отключенной отчетности: от 1 786 715 до 1 892 118.
Рисует довольно ясную картину, не так ли? Практически действительный код с включенной или отключенной отчетностью работает в восемь или девять раз быстрее, чем недействительный с отключенной отчетностью, более чем в 1000 раз быстрее с включенной отчетностью.
и это без вычитания из уравнения накладных расходов на проверку цикла и временного кода.
Конечно, причина, по которой он в 1000 раз быстрее, заключается в том, что задействован вывод.
поэтому я удалил из тестирования накладные расходы на вывод, где это возможно.
Также не пытайтесь запускать все проверки в одном файле: кеширование, буферизация результатов и использование памяти могут исказить результаты в пользу того порядка, в котором вы их запускаете.