2011-03-26 53 views
0

每個子文件夾我在PHP新而無法弄清楚如何做到這一點:函數在PHP

$link = 'http://www.domainname.com/folder1/folder2/folder3/folder4'; 

$domain_and_slash = http://www.domainname.com . '/'; 

$address_without_site_url = str_replace($domain_and_slash, '', $link); 

foreach ($folder_adress) { 
// function here for example 
echo $folder_adress; 
} 

我無法弄清楚如何獲得$ folder_adress。

在上述情況下我希望函數回聲這四個:

  • folder1中
  • 的folder1 /文件夾2
  • 的folder1 /文件夾2/folder3
  • 的folder1 /文件夾2/folder3/folder4

$鏈接將有不同數量的子文件夾...

+0

這是您的網站或?鏈接可以重寫,意味着沒有物理文件夾。如果您在其他網站上嘗試此操作,我建議您立即離開PHP :) – 2011-03-26 22:57:43

+0

感謝您的所有答案。 Webarto - 是的,這是我的網站。感謝Stackoverlfow,我現在創建了一個緩存函數,它將把我所有的php頁面轉換成gzipped html頁面。作品精簡版的魅力:) – Hakan 2011-03-26 23:10:41

回答

2

這讓你那裏。有些事情你可能會探索更多:explodeparse_urltrim。看看這些函數的文檔,可以更好地理解如何處理url以及下面的代碼如何工作。

$link = 'http://www.domainname.com/folder1/folder2/folder3/folder4'; 
$parts = parse_url($link); 
$pathParts = explode('/', trim($parts['path'], '/')); 

$buffer = "";                                                                 
foreach ($pathParts as $part) { 
    $buffer .= $part.'/'; 

    echo $buffer . PHP_EOL; 
} 

/* 
Output: 

folder1/ 
folder1/folder2/ 
folder1/folder2/folder3/ 
folder1/folder2/folder3/folder4/ 
*/ 
+0

感謝您簡潔的代碼。這工作! – Hakan 2011-03-26 23:06:39

0

1)列表方法:使用split獲取文件夾數組,然後將它們連接在一個循環中。

2)字符串方法:使用strpos,其偏移參數從0變爲1 +找到斜槓的最後一個位置,然後使用substr提取文件夾字符串的部分。

編輯:

<?php 
    $folders = 'folder1/folder2/folder3/folder4'; 


    function fn($folder) { 
    echo $folder, "\n"; 
    } 

    echo "\narray approach\n"; 
    $folder_array = split('/', $folders); 
    foreach ($folder_array as $folder) { 
    if ($result != '') 
     $result .= '/'; 
    $result .= $folder; 
    fn($result); 
    } 

    echo "\nstring approach\n"; 
    $pos = 0; 
    while ($pos = strpos($folders, '/', $pos)) { 
    fn(substr($folders, 0, $pos++)); 
    } 
    fn($folders); 
?> 
+0

感謝您的回答。你能舉出一個來自上面代碼的例子嗎? – Hakan 2011-03-26 22:57:57

+0

通過分裂他的意思是爆炸 – AbiusX 2011-03-26 22:59:16

+0

不,分裂他的意思是分裂:)但是,爆炸本來會更好。暫時還沒有完成PHP ... – Amadan 2011-03-26 23:11:43

0

你應該有explode()功能

array explode (string $delimiter , string $string [, int $limit ])

一臉返回一個字符串數組,每個 這是形成字符串的子 將其分割成邊界由字符串分隔符。

使用/作爲分隔符。

0

這是你在找什麼:

$link = 'http://www.domainname.com/folder1/folder2/folder3/folder4'; 
$domain_and_slash = 'http://www.domainname.com' . '/'; 
$address_without_site_url = str_replace($domain_and_slash, '', $link); 
// this splits the string into an array 
$address_without_site_url_array = explode('/', $address_without_site_url); 
$folder_adress = ''; 
// now we loop through the array we have and append each item to the string $folder_adress 
foreach ($address_without_site_url_array as $item) { 
    // function here for example 
    $folder_adress .= $item.'/'; 
    echo $folder_adress; 
} 

希望有所幫助。

+0

這也適用於我想要的。 – Hakan 2011-03-26 23:07:09

0

試試這個:

$parts = explode("/", "folder1/folder2/folder3/folder4"); 
$base = ""; 
for($i=0;$i<count($parts);$i++){ 
    $base .= ($base ? "/" : "") . $parts[$i]; 
    echo $base . "<br/>"; 
} 
0

我會使用的preg_match()的正則表達式的方法:

$m = preg_match('%http://([.+?])/([.+?])/([.+?])/([.+?])/([.+?])/?%',$link) 

// $m[1]: domain.ext 
// $m[2]: folder1 
// $m[3]: folder2 
// $m[4]: folder3 
// $m[5]: folder4 
+1

我不會。我認爲正則表達式在這裏是矯枉過正的。舉個例子,如果有多於或少於四個目錄呢? – Wiseguy 2011-03-26 23:07:48

+0

我爲此提升了ChrisR – 2011-03-27 01:32:14