ok.
непонятно как отличить /ID/ , /NN/, /YYYY/. во всех случаях это числа? если про год можно предположить что он из 4 цифр, то что мешает "номеру" и "ид" быть тоже четырёхзначными? разве такое невозможно? нужно какое-то уточнение… поэтому до поры оставим только один из этих вариантов - ID.
мне кажется логичным буквально описать пары шаблон-обработчик в массиве правил.
предложу алгоритм, это конечно не единственный вариант, но он "легко читабельный" и "легко расширяемый" когда понадобится.
я нарочно не буду вдаваться в лишние детали. можно в виде класса, можно оптимизировать - пофигу на самом деле. алгоритм не меняется.
$rules = array(
'#/^(\d+)/$#' => 'byId',
'#/^(\w+)$/$#' => 'byTitle',
'#/^(\d\d\d\d-\d\d)$/#' => 'byMonth',
'#/^(\d\d\d\d-\d\d-\d\d)$/#' => 'byMonth',
'#/^(\d\d)/(\d+)/$#' => 'byIdAndPage',
'#/^(\d\d\d\d-\d\d)/(\d+)/$#' => 'byMonthAndPage'
);
$func = null;
foreach ($rules as $rule => $f)
if (preg_match_all($rule, $uri, $matches))
{
$func = $f;
break;
}
if ($func) $sql = call_user_func_array($func, $matches);
else die('Wrong');
я не запускал пример, здесь могут быть опечатки, надеюсь суть понятна
надо уточнять набор правил.
phpdude давал тебе ссылку на тему, где в итоге получился красивый класс примерно с похожим алгоритмом
ιιlllιlllι унц-унц