Autor | Zpráva | ||
---|---|---|---|
MartinW Profil * |
#1 · Zasláno: 2. 4. 2021, 12:14:31
Ahoj,
používám skript, který vypisuje složky, podsložky a soubory do struktury stromu. Všechno funguje perfektně, ale problém je v tom, že výsledný výpis nemá položky seřazené podle názvu. Měl bych tedy první loop vložit do pole a poté srovnat pomocí sort();. Soubory v poli mám, a tak ty srovnat dokážu. Ale nezvládnu dát do pole první složky tak, aby všechny funkce fungovaly. Prosím, pomůže mi s tím někdo zkušenější? function createDir($path = '/home/www/mydomain/www/') { if ($handle = opendir($path)) { echo "<ul>"; $queue = array(); // pole pro slozky bych mel pridat sem… napr. $slozky = array(); while (false !== ($file = readdir($handle))) { if (is_dir($path.$file) && $file != '.' && $file !='..') { // a pak pridat sem $slozky[] = ……. ale kam pak dat printSubDir? printSubDir($file, $path, $queue); } else if ($file != '.' && $file !='..') { $queue[] = $file; } } printQueue($queue, $path); echo "</ul>"; } } function printQueue($queue, $path) { asort($queue); // Pridanim tohoto jsou srovnane soubory a podslozky foreach ($queue as $file) { printFile($file, $path); } } function printFile($file, $path) { echo "<li><a href=\"".$path.$file."\">$file</a></li>"; } function printSubDir($dir, $path) { echo "<li><span class=\"toggle\">$dir</span>"; createDir($path.$dir."/"); echo "</li>"; } createDir(); Dekuju moc, Martin |
||
Keeehi Profil |
Doufám že nevadí, že jsem to celé přepsal.
function printTreeStructure($path) { echo "<ul>\n"; $items = scandir($path); foreach ($items as $item) { if (in_array($item, ['.', '..'], true)) { continue; } if (is_dir($path.'/'.$item)) { echo "<li><span class=\"toggle\">$path/$item</span></li>\n"; printTreeStructure($path.'/'.$item); } else { echo "<li><a href=\"$path/$item\">$item</a></li>\n"; } } echo "</ul>\n"; } printTreeStructure(__DIR__); Pokud bys to chtěl mít s preferencí nejdříve složky seřazeně a pak až teprve soubory seřazeně, tak na řádek 5 přidej usort($items, function ($a, $b) use ($path) { if(is_dir($path.'/'.$a)) { if(is_dir($path.'/'.$b)) { return $a <=> $b; } else { return -1; } } else { if(is_dir($path.'/'.$b)) { return 1; } else { return $a <=> $b; } } }); |
||
MartinW Profil * |
#3 · Zasláno: 2. 4. 2021, 17:58:24
Keeehi:
:-D to opravdu nevadi, ze jsi to cele prepsal - Tvoje verze je dokonala a funguje naprosto perfektne. Navic je pro me mnohem jednodussi pro pochopeni a pripadne upravy. Dokonce se v tom vyznam i ja, ktery PHP resi pouze vyjimecne. Hluboce se klanim a velice dekuji za pomoc! :-) |
||
lionel messi Profil |
#4 · Zasláno: 2. 4. 2021, 19:37:39
MartinW:
Alternatívou k vlastnej funkcii môže byť použitie vstavaných tried RecursiveDirectoryIterator a RecursiveIteratorIterator. |
||
Časová prodleva: 3 roky
|
0