---
title: "Sortera filer _och_ underkataloger?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/42298-sortera-filer-och-underkataloger"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "muskot"
published: "2002-04-22T22:11:27.000Z"
updated: "2002-04-25T09:35:14.000Z"
replies: 8
views: 412
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/42298-sortera-filer-och-underkataloger"
---

# Sortera filer _och_ underkataloger?

## #1 — muskot, 2002-04-22T22:11Z

Använder koden under för att lista filer i en katalog. 

Problemet är att jag vill ha vill ha allting listat i bokstavsordning, med underkatalogerna överst. Det vill säga någonting i stil med:

katalog1
katalog2
katalog4
fil1.php
fil2.php

Att man kan använda t ex natcasesort() har jag lite hum om, men det blir inte riktigt bra eftersom underkatalogerna då inte hamnar högst upp!

Förstår ni vad jag menar? Lösningar, någon?

```
$dir_name = "e:\blabla";
$dir = opendir($dir_name);

while ($file_name = readdir($dir)):

	if ($file_name != "." && $file_name != ".."):

		echo "$file_name\n<br>";

	endif;

endwhile;

closedir($dir)
```

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

## #2 — nkrantz, 2002-04-22T22:15Z

förslag bara.. går det inte att läsa in allt i en array och sedan sortera den? typ allt som inte har filändelser först och sedan resten?

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

## #3 — FlashX, 2002-04-23T06:42Z

Annars finns ju [is_dir](http://www.php.net/manual/en/function.is-dir.php) och [is_file](http://www.php.net/manual/en/function.is-file.php) redan klara att användas.

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

## #4 — nkrantz, 2002-04-23T12:10Z

> Annars finns ju is_dir och is_file redan klara att användas.

 

hm.. öh.. just det.. hrmpf..  :r

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

## #5 — muskot, 2002-04-24T14:37Z

Elände...

Jag fattar inte hur jag ska göra. 
Har kollat is_dir och is_file på php.net men jag hajar ändå inte hur jag ska fixa det.

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

## #6 — Famine, 2002-04-24T18:24Z

Hmm

Du får först läsa in och sortera alla kataloger i en array. Sen gör du samma sak fast med filerna. Annars kan du kolla på en kompis och mitt lilla projekt: <http://fami.asna.nu/filelist.txt>

Det finns en del buggar och html koden som skapas är inte direkt den bästa. Hoppas du får ut något av den kanske något röriga koden, som förövrgit var min första "riktiga" sak jag gjorde i php  ;)

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

## #7 — spango, 2002-04-24T19:06Z

Annars kan man ju tänka sig något sådant här:

```php

function isStupidLink($name){
  return $name == '.' or $name == '..';
}

function getEntriesInDirectory($dirname){
  $entries = array();
  $dir = opendir($dirname);
  while ($entry = readdir($dir))
    if (!isStupidLink($entry))
      $entries[] = $entry;
  return $entries;
}

function fileVsDirectorySort($a, $b){
  $adir = is_dir($a);
  $bdir = is_dir($b);
  if ($adir == $bdir)
    return 0;
    else
      return ($adir) ? -1 : 1;
}
$entries = getEntriesInDirectory('C:\foo');
natsort($entries);
usort($entries, 'fileVsDirectorySort');
foreach($entries as $entry)
    #skriv ut $entry
```

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

## #8 — muskot, 2002-04-24T20:13Z

Tack för hjälpen.

Problemet är att det bara går (i alla fall för mig) att lista filer som ligger i min dokumentrot. Försöker jag lista underkataloger flippar det ur...

Den kod famine postade fungerar så länge man kör med opendir('.') men om jag t ex kör opendir('files/') så får jag följande felmeddelande:

> Warning: Wrong datatype in sort() call in d:\\wwwroot\\list.php on line 56

 
Filerna och katalogerna listas, men helt huller om buller och felaktig storleksangivelse i vissa fall (0 b).

Med spangos kod får jag inga felmeddelanden, dock samma fel...

Jämmer och elände :(

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

## #9 — spango, 2002-04-25T09:35Z

Observera att filnamnen inte blir relativa utifrån den katalog du arbetar från. Prova om det går bättre om du byter ut den här raden i getEntriesInDirectory:
$entries\[\] = $entry;
och ersätter den med exempelvis:
$entries\[\] = $dirname . '/' . $entry;

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

---

Tråden på webben: https://www.webforum.nu/amne/php/42298-sortera-filer-och-underkataloger
