2017-08-02 2 views
1

これは、私が考え出したディレクトリとファイルをリストする方法を探していて、ここでStackOverflow(Listing all the folders subfolders and files in a directory using php)で見つかったコードを利用しています。適切なネストされたリストの出力をラップする - PHPディレクトリ一覧

これまでの回答の1つで、コードを変更しました。私はpreg_replaceを使用してパスとファイル名の両方からファイル拡張子を削除し、ucwordsを使用してファイル名を大文字に変換し、str_replaceを使用してスペースのためにダッシュを切り捨てることができました。

私が今問題を抱えているのは、適切にネストされたHTMLリストにすべてをラップすることです。私はそれを設定することができたので、それはリストに包まれていますが、必要に応じてネストされたリストを使用せず、私の人生の間、ディレクトリ名を大文字にする方法や、ディレクトリ名

、誰もがとても親切だろうあれば、質問は、以下のとおりです。

  1. にはどうすれば適切にネストされたリストに出力をラップしますか?
  2. 先行するスラッシュを削除する際にディレクトリ名を大文字にし、ダッシュまたは下線をスペースで置き換えるにはどうすればよいですか?

私は|&nbsp;&nbsp;を意図的に$ss変数に残しました。私は試行錯誤中にどこに表示されるのかを識別する文字を投げたいときに、種類のマーカーとして使用します(例:$ss = $ss . "<li>workingOrNot")。

私が使用している:シンプルでなければなりません、私はこれらの答えのように感じる

<?php 
$pathLen = 0; 

function prePad($level) { 
    $ss = ""; 

    for ($ii = 0; $ii < $level; $ii++) { 
     $ss = $ss . "|&nbsp;&nbsp;"; 
    } 

    return $ss; 
} 

function dirScanner($dir, $level, $rootLen) { 
    global $pathLen; 

    $filesHidden = array(".", "..", '.htaccess', 'resources', 'browserconfig.xml', 'scripts', 'articles'); 

    if ($handle = opendir($dir)) { 

     $fileList = array(); 

     while (false !== ($entry = readdir($handle))) { 
      if ($entry != "." && $entry != ".." && !in_array($entry, $filesHidden)) { 
       if (is_dir($dir . "/" . $entry)) { 
        $fileList[] = "F: " . $dir . "/" . $entry; 
       } 
       else { 
        $fileList[] = "D: " . $dir . "/" . $entry; 
       } 
      } 
     } 
     closedir($handle); 

     natsort($fileList); 

     foreach($fileList as $value) { 
      $displayName = ucwords (str_replace("-", " ", substr(preg_replace('/\\.[^.\\s]{3,5}$/', '', $value), $rootLen + 4))); 

      $filePath = substr($value, 3); 

      $linkPath = str_replace(" ", "%20", substr(preg_replace('/\\.[^.\\s]{3,5}$/', '', $value), $pathLen + 3)); 

      if (is_dir($filePath)) { 
       echo prePad($level) . "<li>" . $linkPath . "</li>\n"; 

       dirScanner($filePath, $level + 1, strlen($filePath)); 

      } else { 
       echo "<li>" . prePad($level) . "<a href=\"" . $linkPath . "\" class=\"className\">" . $displayName . "</a></li>\n"; 
      } 
     } 
    } 
} 

を、ので、多分私は最後の2日間、あまりにも多くのことを見つめてきたか、多分それはフランケンシュタインのコードになっています。

私は試行錯誤を繰り返しており、助けが必要です。

答えて

1
foreach($fileList as $value) { 
    $displayName = ucwords (str_replace("-", " ", substr(preg_replace('/\\.[^.\\s]{3,5}$/', '', $value), $rootLen + 4))); 

    $filePath = substr($value, 3); 

    $linkPath = str_replace(" ", "%20", substr(preg_replace('/\\.[^.\\s]{3,5}$/', '', $value), $pathLen + 3)); 

    if (is_dir($filePath)) { 
     // Do not close <li> yet, instead, open an <ul> 
     echo prePad($level) . "<li>" . $linkPath; . "<ul>\n"; 
     dirScanner($filePath, $level + 1, strlen($filePath)); 
     // Close <li> and <ul> 
     echo "</li></ul>\n"; 
    } else { 
     echo "<li>" . prePad($level) . "<a href=\"" . $linkPath . "\" class=\"className\">" . $displayName . "</a></li>\n"; 
    } 
} 

私は、関数を呼び出して最後に閉じる前にメインを開いていると思います。

+0

ブリリアント。私はそれが私が行方不明だったことが分かっていた。どうもありがとうございます。 – Jaime

関連する問題