| 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: 5 let
|
|||
0