2015-11-02 27 views
0

导致我用我的网站URL路由,这是我使用的代码:它输出的$routes[0]使用var_dump()$routes[1]时以下,$routes[2]PHP 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[3]。这是,同时在以下网站:http://localhost/tutorials/

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

我怎样才能解决这个路由问题?

回答

1

如果我理解正确的话:

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

为了避免这种情况,你可以使用array_pop()代替array_push()和更改条件从trim($route) != ''trim($route) === '' || trim($route) === null。需要第二个条件来从阵列中删除null元素。

或者您可以将explode('/', $base_url)分配给不同的变量,例如, $explodedUrls并重复其遍历。

+0

这是否解决了这种情况下'$ routes [0]'等于'tutorials'的问题?并且'$ routes [1]'为NULL – PhyCoMath

+1

'trim($ route)=== null'从数组中删除null,所以是的,它解决了这个问题。关于'tutorials',它是URL的一部分,所以它保留在数组中。基本网址应该是“www.foo.bar”,然后是“$ routes”的结果是空数组。但是如果你的网址是“www.foo.bar/baz”,那么就是'$ routes [0] ==='baz'。为了解决目录问题(如我所假设的),使用虚拟主机。 –