PHP URL数组返回先前路由数组的结果

时间:2015-11-02 18:44:05

标签: php arrays url routing

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

出于某种原因,在var_dump()$routes[0]$routes[1]$routes[2]上使用$routes[3]时会输出以下内容。这是在以下网站上:http://localhost/tutorials/

string '' (length=0)
string 'tutorials' (length=9)
string 'tutorials' (length=9)
null

如何解决此路由问题?

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话:

  1. 您创建了数组变量$routes
  2. 然后使用explode('/', $base_url)
  3. 中的字符串填充该数组
  4. 您迭代该数组,如果字符串不是'',那么您将该字符串推送到数组的末尾。
  5. 为避免这种情况,您可以使用array_pop()代替array_push(),并将条件从trim($route) != ''更改为trim($route) === '' || trim($route) === null。要从数组中删除null元素,需要第二个条件。

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