2016-12-21 34 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以完成數組。