【问题标题】:Function for each subfolder in PHPPHP中每个子文件夹的功能
【发布时间】:2023-03-19 16:55:02
【问题描述】:

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

在上述情况下,我希望函数回显这四个:

  • 文件夹 1
  • 文件夹 1/文件夹 2
  • 文件夹 1/文件夹 2/文件夹 3
  • 文件夹 1/文件夹 2/文件夹 3/文件夹 4

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

【问题讨论】:

  • 这是您的网站还是?链接可以重写意味着没有物理文件夹。如果你在其他网站上尝试这个,我建议你现在离开 PHP :)
  • 感谢您的所有回答。 Webarto - 是的,这是我的网站。感谢 Stackoverlfow,我现在创建了一个缓存函数,它将我所有的 php 页面转换为 gzip 压缩的 html 页面。作品有点魅力:)

标签: php foreach subdirectory


【解决方案1】:

这会让你到达那里。有些事情你可能会探索更多: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/
*/

【讨论】:

    【解决方案2】:

    你应该看看explode()函数

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

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

    使用 / 作为分隔符。

    【讨论】:

      【解决方案3】:

      这就是你要找的:

      $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】:

        试试这个:

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

        【讨论】:

          【解决方案5】:

          我会使用 preg_match() 作为正则表达式方法:

          $m = preg_match('%http://([.+?])/([.+?])/([.+?])/([.+?])/([.+?])/?%',$link)
          
          // $m[1]: domain.ext
          // $m[2]: folder1
          // $m[3]: folder2
          // $m[4]: folder3
          // $m[5]: folder4
          

          【讨论】:

          • 我不会。我认为正则表达式在这里是多余的。以您的示例为例,如果目录多于或少于四个怎么办?
          【解决方案6】:

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

          【讨论】:

          • 感谢您的回答。能举个上面代码的例子吗?
          • 不,他所说的分裂是指分裂:) 但是是的,爆炸会更好。好久没做PHP了……
          【解决方案7】:

          如果我有时间,我可以做一个更清洁的工作。但这很有效,并且会遇到一些想法:http://codepad.org/ITJVCccT

          使用parse_urltrimexplodearray_popimplode

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-03-17
            • 2012-08-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-04
            • 2013-08-25
            相关资源
            最近更新 更多