/alfa/beta-gamma/sigma
\Alfa\BetaGamma\Sigma
Кто напишет самый эффективный по времени код, тот молодец.
Мой собственный вариант с таймером:
<?php
class Router
{
static function pathToClass($s)
{
return implode('\\', array_map(array('self', 'hyphenToCamel'), explode('/', $s)));
}
static function classToPath($s)
{
return implode('/', array_map(array('self', 'camelToHyphen'), explode('\\', $s)));
}
private static
$S = 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'),
$R = 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');
private static function hyphenToCamel($item)
{
return implode('', array_map('ucfirst', explode('-', $item)));
// return ucfirst(str_replace(self::$R, self::$S, $item));
}
private static function camelToHyphen($item)
{
return trim(str_replace(self::$S, self::$R, $item), '-');
}
}
$a = '/alfa/beta-gamma/sigma';
$t1 = microtime(TRUE);
for ($i=1; $i<1000; ++$i)
$b = Router::pathToClass($a);
$t1 = microtime(TRUE) - $t1;
$t2 = microtime(TRUE);
for ($i=1; $i<1000; ++$i)
$c = Router::classToPath($b);
$t2 = microtime(TRUE) - $t2;
echo $a . "<br/>\n"
. $b . "<br/>\n"
. sprintf('%.6f', $t1) . "<br/>\n"
. $c . "<br/>\n"
. sprintf('%.6f', $t2) . "<br/>\n";
На моей машинке результат
0.029087 и 0.070009