---
title: "Fel vid sortering av mappar med readdir"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/43917-fel-vid-sortering-av-mappar-med-readdir"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Peloquin"
published: "2002-05-16T15:21:40.000Z"
updated: "2002-05-17T19:10:53.000Z"
replies: 2
views: 245
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/43917-fel-vid-sortering-av-mappar-med-readdir"
---

# Fel vid sortering av mappar med readdir

## #1 — Peloquin, 2002-05-16T15:21Z

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](http://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.

```php
<?
//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++;
		}
    }
}
?>
```

Permalänk: https://www.webforum.nu/p/43917

## #2 — Matte, 2002-05-16T16:12Z

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:

```php
while ($dir = readdir($handle))
{
 	if ((is_dir($dir)) && ($dir != ".") && ($dir != ".."))
	{
	 	$list_of_dirs[$i] = $dir;
	}
}

sort ($list_of_dirs);

foreach ($list_of_dirs as $Value) 
{
 	echo "<option value=\"$Value\" class=\"input2\">$Value</option>\n";
	if ($picpaths == $Value)
	{
	 	$path = "pictures/$Value";
	}
}
```

 Men samtidigt så förstår jag inte vad du gör med räknaren $i, så jag kanske fullständigt har missuppfattat vad du försöker göra.

Permalänk: https://www.webforum.nu/p/674477

## #3 — Peloquin, 2002-05-17T19:10Z

Nu funkar det som det skall...!

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:

```php
<?
//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!**

Permalänk: https://www.webforum.nu/p/675063

---

Tråden på webben: https://www.webforum.nu/amne/php/43917-fel-vid-sortering-av-mappar-med-readdir
