Некропостну тему. Поскольку задался таким же вопросом, а на дворе - php 7.2.8 Ваш код не выдерживает критики. Ибо операционные затраты на вызов функций и постинкремент переменной в цикле - нивелируют разницу самого тестируемого блока. Я уж промолчу про то, что в вашем примере 99,999% циклов выполняется лишь самое последнее условие. "Немного" переделаем код, чтобы тест получился более чистым. Для 1 000 000 000 итераций: PHP: <?php $s = time(); for ($i = 0; $i < 1000000000; ++$i) { $x = $i%10; if ($x == 1) { $y = $x * 1; } elseif ($x == 2) { $y = $x * 2; } elseif ($x == 3) { $y = $x * 3; } elseif ($x == 4) { $y = $x * 4; } elseif ($x == 5) { $y = $x * 5; } elseif ($x == 6) { $y = $x * 6; } elseif ($x == 7) { $y = $x * 7; } elseif ($x == 8) { $y = $x * 8; } elseif ($x == 9) { $y = $x * 9; } else { $y = $x * 10; } } print("if: ".(time() - $s)."sec\n"); $s = time(); for ($i = 0; $i < 1000000000; ++$i) { $x = $i%10; switch ($x) { case 1: $y = $x * 1; break; case 2: $y = $x * 2; break; case 3: $y = $x * 3; break; case 4: $y = $x * 4; break; case 5: $y = $x * 5; break; case 6: $y = $x * 6; break; case 7: $y = $x * 7; break; case 8: $y = $x * 8; break; case 9: $y = $x * 9; break; default: $y = $x * 10; } } print("switch: ".(time() - $s)."sec\n"); ?> Результат: if: 69sec switch: 42sec Счёт разгромный в пользу Switch.
Не могу сказать точно как в PHP. В сях быстродействие зависит (если не изменилось чего в новых компиляторах) от количества условий. Только, на сколько я помню, было наоборот - на малых количествах шустрее отрабатывали if на большом switch.... Вполне возможно, что зависит и от самих действий в теле. А вообще подобные тесты на самом деле "ни о чем".... Тут в каждой конкретной ситуации свои параметры. Уж тестить так тестить. PHP: $ar = [ 0 => 10, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, ]; for ($i = 0; $i < 1000000000; ++$i) { $x = $i%10; $y = $x * (array_key_exists($x,$ar) ? $ar[$x] : $ar[0]); } print("arr: ".(time() - $s)."sec\n"); $ar = [ 0 => function($x){return $x*10;}, 1 => function($x){return $x*1;}, 2 => function($x){return $x*2;}, 3 => function($x){return $x*3;}, 4 => function($x){return $x*4;}, 5 => function($x){return $x*5;}, 6 => function($x){return $x*6;}, 7 => function($x){return $x*7;}, 8 => function($x){return $x*8;}, 9 => function($x){return $x*9;}, ]; for ($i = 0; $i < 1000000000; ++$i) { $x = $i%10; $y = array_key_exists($x,$ar) ? $ar[$x]($x) : $ar[0]($x); } print("func: ".(time() - $s)."sec\n"); ?>