gooID利用規約 改定のお知らせ

お世話になります。

指定されたルートフォルダの中の階層すべてを、
添え付け画像の様な
HTMLのテーブルに変換して出力したいのですが、
そのアルゴリズムを教えてください。

各フォルダでは階層数がバラバラのため、テーブル
横のtdタグの数がバラバラになり、空白セル(図中のくろいセル)が
残ってしまいますが、これはそのまま気にしないで構いません。

言語は、できればC#,C,Java,php等でお願いします。

何卒宜しくお願いいたします。

「フォルダ階層をHTMLTable化するア」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ファイル対応するには、findDirを以下のとおり変更すればOKです。



function findDir($path) {
$result = array();
$files = scandir($path);
foreach ($files as $file){
if ($file === '.' || $file === '..') continue;
if (is_dir($path . DIRECTORY_SEPARATOR . $file)){
$result[$file] = findDir($path . DIRECTORY_SEPARATOR . $file);
}else{
$result[$file] = array();
}
}
return $result;
}
    • good
    • 0
この回答へのお礼

何度もありがとうございました。

おかげで、望んでいたものができそうです。

いまだに頂いたソースの構造を理解しきれていませんが、
少しずつ解析して勉強していきたいと思います。

本当にありがとうございました。

お礼日時:2013/12/25 09:05

[PHP Ver]


//ディレクトリ構造解析
function findDir($path) {
$result = array();
$files = scandir($path);
foreach ($files as $file){
if ($file === '.' || $file === '..') continue;
if (is_dir($path . DIRECTORY_SEPARATOR . $file)){
$result[$file] = findDir($path . DIRECTORY_SEPARATOR . $file);
}
}
return $result;
}
//ディレクトリ構造を配列化
function dir2TableArray($dirs, &$table, &$row, $col){
foreach ($dirs as $dir_name => $child_dirs){
$table[$row][$col] = $dir_name;
$trow = $row;
$count = dir2TableArray($child_dirs, $table, $row, $col + 1);
if($row > $trow)$row -= 1;
$row += 1;
}
}
//dir2TableArrayで作った配列をHTML Table化
function array2HtmlTable($tableArray){
$html = '<table>';
for($row=0;$row<count($tableArray); $row++){
$html .= '<tr>';
for($col=0;$col<=max(array_keys($tableArray[$row])); $col++){
if(array_key_exists($col,$tableArray[$row])){
$rowspan = rowSpanCount($tableArray,$row + 1,$col);
$html .= ($rowspan > 1 ? '<td rowspan="'.$rowspan.'">' : '<td>') ;
$html .= $tableArray[$row][$col].'</td>';
}
}
$html .= "</tr>";
}
$html .= '</table>';
return $html;
}

function rowSpanCount($tableArray,$targetRow,$col){
$max = 1;
for($row=$targetRow;$row<count($tableArray); $row++){
if(!array_key_exists($col,$tableArray[$row]) && isColData($tableArray[$row],$col)){
$max += 1;
}else{
break;
}
}
return $max;
}
function isColData($tableArray,$col){
for($c=$col - 1; $c >= 0; $c--){
if(array_key_exists($c,$tableArray)){
return false;
}
}
return true;
}


$dirs = findDir(".");//ディレクトリ検索
$table =array();
$trow = 0;
dir2TableArray($dirs,$table,$trow,0);//配列化
var_dump(array2HtmlTable($table));//HTML Table化

この回答への補足

ご回答、ありがとうございます。

早速試してみましたが、フォルダは表示されましたが、
ファイルは表示されていませんでした。

大変お手数をおかけし、申し訳ありませんが、
ファイルも一緒に表示されるようなサンプルをお願いいたします。

補足日時:2013/12/24 13:58
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング