<?php
Class Route
{
//TRAP REQUESTS ARRAY:
public static $request;
private static $param;
public static function matchURI($uri = null) {
$uri = (!$uri) ? $_SERVER['PATH_INFO'] : $uri;
$uri = (!$uri) ? '/' : rtrim($uri,"\/");
if(!empty(self::$request)) {
$count=count(self::$request);
for($i=0; $i<$count; ++$i) {
foreach(self::$request[$i] as $k => $v) {
if (is_array($v) and $k !== 'param') {
self::$param = self::$request[$i]['param'];
$v['request'] = preg_replace_callback("/\<(?<key>[0-9a-z_]+)\>/",
'Route::_replacer',
str_replace(")",")?", $v['request'])
);
$rulleTemp = array_merge((array)self::$request[$i], (array)$v);
if(($t = self::_reportRulle($rulleTemp, $uri)))
return $t;
}
}
}
} else return array();
}
private static function _replacer($matches) {
if(isset(self::$param[$matches['key']])) {
return "(?<".$matches['key'].">".self::$param[$matches['key']].")";
} else return "(?<".$matches['key'].">"."([^/]+)".")";
}
private static function _reportRulle($ini_array, $uri) {
if(is_array($ini_array) and $uri) {
if(preg_match("#^".$ini_array['request']."$#", $uri, $match)){
$r = array_merge((array)$ini_array, (array)$match);
foreach($r as $k => $v)
if((int)$k OR $k == 'param' OR $k == 'request')
unset($r[$k]);
return $r;
}
}
}
/** =================================================================== **/
}
|