0
私はディレクトリツリーを再帰的に反復する関数を持っています。 これはうまくいく、私はディレクトリとファイルで返される配列を取得します。再帰ディレクトリiteratorサブフォルダを持つファイルのファイルパスを取得
$dir = 'files';
function dirToArray($dir) {
$result = array();
$cdir = scandir($dir);
foreach ($cdir as $key => $value) {
if (!in_array($value,array(".",".."))) {
if (is_dir($dir . DIRECTORY_SEPARATOR . $value)) {
$result[$value] = dirToArray($dir . DIRECTORY_SEPARATOR . $value);
}
else {
$result[] = $value;
}
}
}
return $result;
}
私はその後ウィッヒも正常に動作し、ユーザーに私の素敵なメニュー構造を表示するためにreturntedアレイの上recursivly繰り返します。
function printAll($arr) {
if(!is_array($arr)) {
echo '<li><div class="sub_menu_path"></div><a href="'.$arr.'" class="file"><i class="fa fa-fw fa-file-text-o"></i>'.$arr.'</a></li>';
}
else {
foreach($arr as $k => $v) {
if(is_array($v)) {
echo '<li><div class="sub_menu_path"></div><a href="'.$k.'" class="multi_menu folder"><i class="fa fa-fw fa-folder-o"></i>'.$k.'</a>';
echo '<ul class="sub_menu">';
printAll($v);
echo '</ul>';
echo '</li>';
}
else {
echo '<li><div class="sub_menu_path"></div><a href="'.$v.'" class="file"><i class="fa fa-fw fa-file-text-o"></i>'.$v.'</a></li>';
}
}
}
}
printall(dirToArray($dir));
結果:
しかし、私は、サブフォルダを含む完全なパスを取得する方法HTML <a href="$value">$value</a>
でユーザにwraptファイルを表示したときに私がしたいことはありますか?例えば:files/Products/Cress/Ramnunculus/Introduction/file.txt 私はfile.txtを得ます。 file.txtをクリックすると、ofcourseが見つかりません。
EDIT(ソリューション):
答えで提案されているように、私は追加のパラメータを追加しました。 変数$v
を$k
に変更しました。これは文字列変換に配列を与えるためです。
function printAll($arr, $path = '') {
if(!is_array($arr)) {
echo '<li><div class="sub_menu_path"></div><a href="'.$arr.'" class="file"><i class="fa fa-fw fa-file-text-o"></i>'.$arr.'</a></li>';
}
else {
foreach($arr as $k => $v) {
$file_path = $path . ($path == '' ? '' : '/') . $k;
if(is_array($v)) {
echo '<li><div class="sub_menu_path"></div><a href="" class="multi_menu folder"><i class="fa fa-fw fa-folder-o"></i>'.$k.'</a>';
echo '<ul class="sub_menu">';
printAll($v, $file_path);
echo '</ul>';
echo '</li>';
}
else {
echo '<li><div class="sub_menu_path"></div><a href="'.$file_path.'" class="file"><i class="fa fa-fw fa-file-text-o"></i>'.$v.'</a></li>';
}
}
}
}
printall(dirToArray($dir));
オプションのパラメータを含めるこれは私にエラーを与える:文字列変換 – Julez
編集に配列を:私は$ kに$ Vを変更し、今では動作します。多くの人に感謝します。それはとても簡単だったことを知っている。 – Julez
あなたは私にそれを泥炭で、あなたの配列構造で正しく動作するように私のコードを変更しました:)乾杯! – Siffer