PHP中每个子文件夹的功能

时间:2011-03-26 22:51:14

标签: php foreach subdirectory

我是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

$ link会有不同数量的子文件夹......

7 个答案:

答案 0 :(得分: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/
*/

答案 1 :(得分:0)

1)列表方法:使用split获取文件夹数组,然后在循环中连接它们。

2)字符串方法:使用带有偏移参数的strpos,该参数从0到1 +最后一个位置找到斜杠,然后使用substr提取文件夹字符串的一部分。 / p>

编辑:

<?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);
?>

答案 2 :(得分:0)

您应该查看 explode() 功能

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

  

返回一个字符串数组,每个字符串   这是形成的字符串的子串   通过在形成的边界上分裂它   通过字符串分隔符。

使用 / 作为分隔符。

答案 3 :(得分: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;
}

希望有所帮助。

答案 4 :(得分:0)

如果我有时间,我可以做一份更干净的工作。但这可以解决问题:http://codepad.org/ITJVCccT

使用parse_urltrimexplodearray_popimplode

答案 5 :(得分:0)

试试这个:

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

答案 6 :(得分:0)

我会将preg_match()用于正则表达式方法:

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

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