using pears benchmark interate function...
i timed a 50 long ifelse and a 50 long case statement
matching up to 2 characters...
i timed 10,000 iterations... starting with matching the first item in the case/ifelse then the second then the third and so on...
the pear benchmark iterator can be found at http://pear.php.net
here are the results
function overhead : 0.000066 sec
case function : 0.000083 sec
if else function : 0.000097 sec
'case' function executed in 85.567010309278% the time of 'if else' function
here is the code
<?php
include "Benchmark/Iterate.php";
$match = array(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'aa',
'ab', 'ac', 'ad', 'ae', 'af', 'ag', 'ah', 'ai', 'aj',
'ak', 'al', 'am', 'an', 'ao', 'ap', 'aq', 'ar', 'as',
'at', 'au', 'av', 'aw', 'ax'
);
function overhead()
{
global $match;
static $index = 0;
$value = $match[$index];
$index++;
if ( $index >= count($match) ) {
$index = 0;
}
}
function do_case()
{
global $match;
static $index = 0;
$value = $match[$index];
switch ( $value ) {
case 'a': $var = $value; break; case 'b': $var = $value; break;
case 'c': $var = $value; break; case 'd': $var = $value; break;
case 'e': $var = $value; break; case 'f': $var = $value; break;
case 'g': $var = $value; break; case 'h': $var = $value; break;
case 'i': $var = $value; break; case 'j': $var = $value; break;
case 'k': $var = $value; break; case 'l': $var = $value; break;
case 'm': $var = $value; break; case 'n': $var = $value; break;
case 'o': $var = $value; break; case 'p': $var = $value; break;
case 'q': $var = $value; break; case 'r': $var = $value; break;
case 's': $var = $value; break; case 't': $var = $value; break;
case 'u': $var = $value; break; case 'v': $var = $value; break;
case 'w': $var = $value; break; case 'x': $var = $value; break;
case 'y': $var = $value; break; case 'z': $var = $value; break;
case 'aa': $var = $value; break; case 'ab': $var = $value; break;
case 'ac': $var = $value; break; case 'ad': $var = $value; break;
case 'ae': $var = $value; break; case 'af': $var = $value; break;
case 'ag': $var = $value; break; case 'ah': $var = $value; break;
case 'ai': $var = $value; break; case 'aj': $var = $value; break;
case 'ak': $var = $value; break; case 'al': $var = $value; break;
case 'am': $var = $value; break; case 'an': $var = $value; break;
case 'ao': $var = $value; break; case 'ap': $var = $value; break;
case 'aq': $var = $value; break; case 'ar': $var = $value; break;
case 'as': $var = $value; break; case 'at': $var = $value; break;
case 'au': $var = $value; break; case 'av': $var = $value; break;
case 'aw': $var = $value; break; case 'ax': $var = $value; break;
}
$index++;
if ( $index >= count($match) ) {
$index = 0;
}
}
function do_ifelse()
{
global $match;
static $index = 0;
$value = $match[$index];
if ( $value == 'a' ) { $var = $value; } else if ( $value == 'b' ) { $var = $value; } else
if ( $value == 'c' ) { $var = $value; } else if ( $value == 'd' ) { $var = $value; } else
if ( $value == 'e' ) { $var = $value; } else if ( $value == 'f' ) { $var = $value; } else
if ( $value == 'g' ) { $var = $value; } else if ( $value == 'h' ) { $var = $value; } else
if ( $value == 'i' ) { $var = $value; } else if ( $value == 'j' ) { $var = $value; } else
if ( $value == 'k' ) { $var = $value; } else if ( $value == 'l' ) { $var = $value; } else
if ( $value == 'm' ) { $var = $value; } else if ( $value == 'n' ) { $var = $value; } else
if ( $value == 'o' ) { $var = $value; } else if ( $value == 'p' ) { $var = $value; } else
if ( $value == 'q' ) { $var = $value; } else if ( $value == 'r' ) { $var = $value; } else
if ( $value == 's' ) { $var = $value; } else if ( $value == 't' ) { $var = $value; } else
if ( $value == 'u' ) { $var = $value; } else if ( $value == 'v' ) { $var = $value; } else
if ( $value == 'w' ) { $var = $value; } else if ( $value == 'x' ) { $var = $value; } else
if ( $value == 'y' ) { $var = $value; } else if ( $value == 'z' ) { $var = $value; } else
if ( $value == 'aa' ) { $var = $value; } else if ( $value == 'ab' ) { $var = $value; } else
if ( $value == 'ac' ) { $var = $value; } else if ( $value == 'ad' ) { $var = $value; } else
if ( $value == 'ae' ) { $var = $value; } else if ( $value == 'af' ) { $var = $value; } else
if ( $value == 'ag' ) { $var = $value; } else if ( $value == 'ah' ) { $var = $value; } else
if ( $value == 'ai' ) { $var = $value; } else if ( $value == 'aj' ) { $var = $value; } else
if ( $value == 'ak' ) { $var = $value; } else if ( $value == 'al' ) { $var = $value; } else
if ( $value == 'am' ) { $var = $value; } else if ( $value == 'an' ) { $var = $value; } else
if ( $value == 'ao' ) { $var = $value; } else if ( $value == 'ap' ) { $var = $value; } else
if ( $value == 'aq' ) { $var = $value; } else if ( $value == 'ar' ) { $var = $value; } else
if ( $value == 'as' ) { $var = $value; } else if ( $value == 'at' ) { $var = $value; } else
if ( $value == 'au' ) { $var = $value; } else if ( $value == 'av' ) { $var = $value; } else
if ( $value == 'aw' ) { $var = $value; } else if ( $value == 'ax' ) { $var = $value; }
$index++;
if ( $index >= count($match) ) {
$index = 0;
}
}
$benchmark = new Benchmark_Iterate();
echo "<pre><tt>";
$benchmark->run(10000, 'overhead', $match );
$overhead = $benchmark->get();
echo "function overhead : {$overhead['mean']} sec\n";
$benchmark->run(10000, 'do_case', $match );
$case = $benchmark->get();
echo "case function : {$case['mean']} sec\n";
$benchmark->run(10000, 'do_ifelse', $match );
$ifelse = $benchmark->get();
echo "if else function : {$ifelse['mean']} sec\n\n";
echo "'case' function executed in ". (($case['mean']/$ifelse['mean'])*100) ."% the time of 'if else' function";
echo "</tt></pre>";
?>