2016-12-21 26 views
1

我想解析一个URL并将其每个子路径添加为数组中的一个元素。解析url并在数组中添加每个子路径

例如:

http://www.abcd.com/efgh/ijkl/mnop.php 

此URL阵列将是这样的:

[ 
    'http://www.abcd.com', 
    'http://www.abcd.com/efgh', 
    'http://www.abcd.com/efgh/ijkl', 
    'http://www.abcd.com/efgh/ijkl/mnop.php' 
] 

的问题是我无法分解的路径添加到先前的路径。

explode("/",parse_url($url, PHP_URL_PATH)) 
+1

到目前为止你有尝试过什么吗? SO不是一个简单的人为你提供解决方案的地方! – wiredolphin

+0

我想帮助你,但我认为@Vincent是对的。这并不困难。 – bugscoder

+0

我不能爆炸'parse_url($ url,PHP_URL_PATH)'并相应地添加它@bugscoder – Azhar

回答

1

这是一种方法。您可以使用parse_url分解URL。在展开路径之后,我使用array_filter来清除阵列中的清空,并使用array_values来重置键。

$url = 'http://www.abcd.com/efgh/ijkl/mnop.php'; 
$root = parse_url($url, PHP_URL_SCHEME) . '://' . parse_url($url, PHP_URL_HOST); 
$paths = array_values(array_filter(explode('/', parse_url($url, PHP_URL_PATH)))); 

$arr[] = $root; 
for ($i = 0; $i < count($paths); $i++) { 
    $root .= '/' . $paths[$i]; 
    $arr[] = $root; 
} 
var_dump($arr); 

输出:

array(4) { 
    [0]=> 
    string(19) "http://www.abcd.com" 
    [1]=> 
    string(24) "http://www.abcd.com/efgh" 
    [2]=> 
    string(29) "http://www.abcd.com/efgh/ijkl" 
    [3]=> 
    string(38) "http://www.abcd.com/efgh/ijkl/mnop.php" 
} 
+0

它的工作,谢谢:) – Azhar

1

通过解析url,然后展开路径,您可以通过循环遍历路径来构建每个路径。

function urlArrays($url) 
{ 
    $paths = array(); 
    $parsed = parse_url($url); 
    if($parsed){ 
     $pathParts = explode("/",$parsed['path']); 
     $current = $parsed['scheme'] . "://" . $parsed['host']; 
     $paths[] = $current; 
     for($i = 0; $i < count($pathParts); $i++) 
     { 
      if($pathParts[$i] != "") 
      { 
       $current = $current . "/" . $pathParts[$i]; 
       $paths[] = $current; 
      } 
     } 
    } 
    return $paths; 
} 
1

可以parse_url建立从URL和explode功能的阵列到path拆分到一个数组中,并从那里,你可以通过他们循环,达到什么您正在寻找。这里的代码是:

​​
1

这是一个使用string access and modification by character的替代方法。

for ($i=0, $c=0, $path=''; isset($url[$i]); $path .= $url[$i++]) { 
    if ($url[$i] == '/' && ++$c > 2) $paths[] = $path; 
} 
$paths[] = $url; 

在这个循环中,

  • $i是字符串
  • $c在当前位置被正在运行的总的 /字符(方案后排除初始2)
  • $path是 一次重建一个字符的路径

基本上,您将逐字符(或字节,真的)遍历字符串,并且每当您在初始两个字符后遇到/时,都会将当前路径附加到该数组。在循环之后,您追加整个URL以完成数组。