我正在用 PHP 组合一个路由器,它匹配一个模式,比如“users/:id”,到一个路由,比如“users/123”,返回类似于“id”=> 123 的东西。这就是我到目前为止所拥有的.
function match_path($path, $pattern){
if ($path == $pattern){
return true;
}
// check for :replacements
if (strpos($pattern, ":")!== false) {
// split path & pattern into fragments
$split_path = explode('/',$path);
$split_pattern = explode('/', $pattern);
// check that they are the same length
if (count($split_path) !== count($split_pattern)){
return false;
}
// iterate over pattern
foreach ($split_pattern as $index => $fragment) {
// if fragment is wild
if (strpos($fragment, ":") == 0){
$params[substr($fragment, 1)] = $split_path[$index];
// if fragment doesn't match
} elseif ($fragment !== $split_path[$index]) {
return false;
}
// continue if pattern matches
}
// returns hash of extracted parameters
return $params;
}
return false;
}
我确信必须有一种方法可以用正则表达式干净地做到这一点。
更好的是,很可能有一个 PHP 函数可以做到这一点。