Ho fatto un test simile con risultati molto diversi. Aggiungendo la pre-manipolazione della stringa, il tempo di esecuzione e' piu' che triplicato. Non e' che hai messo le tue funzioni fuori dal ciclo da un milione di iterazioni tenendo dentro solo preg_match?
Codice PHP:
$str = '3_16:54-18:30_teacher2planning_FK_teacher2module_id';
for ( $x = 0; $x < 1000000; $x++ ) {
$str2 = str_replace(substr($str, stripos($str, "_teacher2planning_")), "", $str);
preg_match("/^[0-9]+_[0-9]{2}:[0-9]{2}-[0-9]{2}:[0-9]{2}_teacher2planning/", $str2);
}
// $ time php foo.php
// real 0m16.638s
// user 0m11.737s
// sys 0m4.800s
Codice PHP:
$str = '3_16:54-18:30_teacher2planning_FK_teacher2module_id';
for ( $x = 0; $x < 1000000; $x++ ) {
preg_match("/^[0-9]+_[0-9]{2}:[0-9]{2}-[0-9]{2}:[0-9]{2}_teacher2planning/", $str);
}
// $ time php foo.php
// real 0m5.229s
// user 0m4.008s
// sys 0m1.188s