Jag har skrivit ett snuttigt litet program som på automagisk väg läser in alla bilder i underliggande mappar och visar upp dessa för besökaren. För att kunna navigera mellan olika bildbanker läser jag in mappnamnen med nedanstående kodsnutt och lägger in dem i en drop down list.
Problemet jag har när jag populerar en array med dessa namn för att loop-a genom dem, är att dessa inte går att sortera... sort funkar inte och det verkar ingen annan sorteringsfunktion heller...
Det stod nåt på se.php.net om att readdir tar in datan i den ordning de är skrivna på hårddisken... men det borde väl inte spela nån roll när jag skall sortera min array?
P.S: Det är fråga om en Debian GNU/Linux server med Apache/1.3.24, PHP 4.1.0 och Ext2 som filsystem.
<?
//Build up the drop down list and populate it
// Get the directory names
$homedir = ("."); // use "." for the current directory, or change this to the directory's name
$handle = opendir($homedir);
$i = 0;
//while (false !== ($dir = readdir($handle)))
while ($dir = readdir($handle))
{
if ((is_dir($dir)) && ($dir != ".") && ($dir != ".."))
{
$list_of_dirs[$i] = $dir;
sort ($list_of_dirs);
reset ($list_of_dirs);
echo "<option value=\"$list_of_dirs[$i]\" class=\"input2\">$list_of_dirs[$i]</option>\n";
if ($picpaths == $list_of_dirs[$i])
{
$path = "pictures/$list_of_dirs[$i]";
$i++;
}
}
}
?>
Som jag läser koden så skriver du ut efterhand du läser in i arrayen. Borde kanske läsa in allt, sortera och sedan skriva ut. Då kanske det kan gå med något liknande det här:
Tyvärr funkade inte Din lösning riktigt som jag hade tänkt, så jag knåpade på i ett par dagar och fick fram denna kodsnutt till slut:
<?
//Build up the drop down list and populate it
// Get the directory names
$homedir = ("."); // use "." for the current directory, or change this to the directory's name
$a = `find $homedir -maxdepth 1 -depth -type d -print`;
$dirs = explode ("\n", $a);
sort($dirs);
for ($i = 0; $i<=sizeof($dirs);$i++)
{
if (($dirs[$i] != ".") && ($dirs[$i] != "..") && ($dirs[$i] != ""))
{
$dirs[$i] = ereg_replace( "./", "", $dirs[$i] );
echo "<option value=\"$dirs[$i]\" class=\"input2\">$dirs[$i]</option>\n";
if ($picpaths == $dirs[$i])
{
$path = "pictures/$dirs[$i]";
}
}
}
?>
Jag tog och skippade hela opendir / readdir balletten och använda mig av Linux find-kommando istället. Detta läser in mappnamnen i en array som jag sedan sorterar och skriver ut som drop down list.
Tack för hjälpen i alla fall!
252 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9