我在网站上使用URL路由,这是我使用的代码:
/* TURN FULL URL INTO --> /example/example2/example3 */
function getCurrentUri()
{
$basepath = implode('/', array_slice(explode('/', $_SERVER['SCRIPT_NAME']), 0, -1)) . '/';
$uri = substr($_SERVER['REQUEST_URI'], strlen($basepath));
if (strstr($uri, '?')) $uri = substr($uri, 0, strpos($uri, '?'));
$uri = '/' . trim($uri, '/');
return $uri;
}
$base_url = getCurrentUri();
$routes = array();
$routes = explode('/', $base_url);
foreach($routes as $route)
{
if(trim($route) != ''){
array_push($routes, $route);
}
}
由于某种原因,当在$routes[0]
、$routes[1]
、$routes[2]
和$routes[3]
上使用var_dump()
时,它输出以下内容。这是在以下网站上:http://localhost/tutorials/
string '' (length=0)
string 'tutorials' (length=9)
string 'tutorials' (length=9)
null
如何解决此路由问题?
如果我理解正确:
- 您创建了数组变量
$routes
- 然后用
explode('/', $base_url)
中的字符串填充该数组 - 迭代该数组,如果字符串不是
''
,则将该字符串推到数组的末尾
为了避免这种情况,您可以使用array_pop()
而不是array_push()
,并将条件从trim($route) != ''
更改为trim($route) === '' || trim($route) === null
。第二个条件是从数组中移除null
元素。
或者,您可以将explode('/', $base_url)
分配给不同的变量,例如$explodedUrls
,并对其进行迭代。