PHP URL数组返回上一个路由数组的结果


PHP URL array returns result from previous routing array

我在网站上使用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

如何解决此路由问题?

如果我理解正确:

  1. 您创建了数组变量$routes
  2. 然后用explode('/', $base_url)中的字符串填充该数组
  3. 迭代该数组,如果字符串不是'',则将该字符串推到数组的末尾

为了避免这种情况,您可以使用array_pop()而不是array_push(),并将条件从trim($route) != ''更改为trim($route) === '' || trim($route) === null。第二个条件是从数组中移除null元素。

或者,您可以将explode('/', $base_url)分配给不同的变量,例如$explodedUrls,并对其进行迭代。