---
title: "Sortera dubbel-array?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/183903-sortera-dubbel-array"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Quid"
published: "2010-06-22T06:52:04.000Z"
updated: "2010-06-22T12:53:52.000Z"
replies: 10
views: 666
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/183903-sortera-dubbel-array"
---

# Sortera dubbel-array?

## #1 — Quid, 2010-06-22T06:52Z

Min fillistning går framåt, men jag har stött på problem igen  :)

```php
<?php
$files = array();
if ($handle = opendir('./')) {
    while (false != ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && $file != "index.php") {
            $file_object = array(
				'name' => $file,
				'size' => round((filesize($file) / 1024), 1) . "k",
				'type' => substr($file, -3),
				'time' => date("Y-m-d H:i", filectime($file))
			);
			$files[] = $file_object;
        }
    }
    closedir($handle);
}

natcasesort($files[name]);

foreach($files as $fileinfo) {
	echo $fileinfo[type] . ", " . $fileinfo[name] . ", " . $fileinfo[time] . ", " . $fileinfo[size] . "<BR>";
}
?>
```

Där sorterar den som jag vill ha det, men det läggs till en rad utan värden på slutet (den skriver bara ut tre , (dvs. komma)), vilket det inte gör om jag tar bort "natcasesort($files\[name\]);".

Någon som vet varför det blir så och hur man löser det?

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

## #2 — GunnarD, 2010-06-22T07:59Z

Om man stoppar in print_r($files); före och efter natcasesort så ser man att den inte plir sorterad.

```
<?php
$files = array();
if ($handle = opendir('./')) {
    while (false != ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && $file != "index.php") {
            $file_object = array(
                'name' => $file,
                'size' => round((filesize($file) / 1024), 1) . "k",
                'type' => substr($file, -3),
                'time' => date("Y-m-d H:i", filectime($file))
            );
            $files[] = $file_object;
        }
    }
    closedir($handle);
}
 
print_r($files);
natcasesort($files[name]);
print_r($files);
 ?>
```

Och man får warningar vid natcasesort() funktionen

```
$ php aaa.php 
Array
(
    [0] => Array
        (
            [name] => file10.txt
            [size] => 0k
            [type] => txt
            [time] => 2010-06-22 09:14
        )
 
    [1] => Array
        (
            [name] => aaa.php
            [size] => 0.7k
            [type] => php
            [time] => 2010-06-22 09:53
        )
 
    [2] => Array
        (
            [name] => file2.txt
            [size] => 0k
            [type] => txt
            [time] => 2010-06-22 09:14
        )
 
    [3] => Array
        (
            [name] => file1.txt
            [size] => 0k
            [type] => txt
            [time] => 2010-06-22 09:14
        )
 
)
PHP Notice:  Use of undefined constant name - assumed 'name' in aaa.php on line 19
PHP Warning:  natcasesort() expects parameter 1 to be array, null given in aaa.php on line 19
Array
(
    [0] => Array
        (
            [name] => file10.txt
            [size] => 0k
            [type] => txt
            [time] => 2010-06-22 09:14
        )
 
    [1] => Array
        (
            [name] => aaa.php
            [size] => 0.7k
            [type] => php
            [time] => 2010-06-22 09:53
        )
 
    [2] => Array
        (
            [name] => file2.txt
            [size] => 0k
            [type] => txt
            [time] => 2010-06-22 09:14
        )
 
    [3] => Array
        (
            [name] => file1.txt
            [size] => 0k
            [type] => txt
            [time] => 2010-06-22 09:14
        )
 
    [name] => 
)
```

Om du tittar här så kanske du får tipps på hur du skall lösa det: <http://www.the-art-of-web.com/php/sortarray/> eller så kan man först sortera fillistan och sedan hämta information om resp. fil.

/red: fixade till koden lite.

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

## #3 — Quid, 2010-06-22T08:19Z

Jag bytte ut:

```php
natcasesort($files[name]);
```

till:

```php
natcasesort($file_object[name]);
```

och då funkar sorteringen och jag får ingen extra rad, ocj det var ju egentligen den arrayn jag ville sortera  :)

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

## #4 — oskob, 2010-06-22T08:25Z

natcasesort($files\[name\]);

Vet inte riktigt vad du försöker uppnå med den raden? För det första borde du få en warning där php säger att "name" inte är en konstant och den kommer översätta det till strängen "name", alltså bli samma sak som att skriva natcasesort($files\["name"\]);

Och i så fall kommer ju $files\["name"\] vara tom. Namnen ligger ju i $files\[0\]\["name"\], $files\[1\]\["name"\] osv. 

För att sortera mer komplexa saker än endimensionella arrayer är det nog usort() du får använda, typ såhär:

```
function mySort($a, $b)
{
	return strnatcmp($a['name'], $b['name']);
}

usort($files, "mySort");
```

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

## #5 — oskob, 2010-06-22T08:28Z

> **[Quid skrev:](https://www.webforum.nu/p/1508678)**
>
> Jag bytte ut:
>
>
> ```php
> natcasesort($files[name]);
> ```
>
> 
> 
> till:
>
>
> ```php
> natcasesort($file_object[name]);
> ```
>
> 
> 
> och då funkar sorteringen och jag får ingen extra rad, ocj det var ju egentligen den arrayn jag ville sortera  :)

Det där går inte ihop i mitt huvud ett dugg :(
Du sorterar ju en array med bara 1 post? Har du kollat så filerna verkligen kommer i rätt ordning? I så fall får jag gå på kurs :P

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

## #6 — GunnarD, 2010-06-22T08:45Z

Håller med oskob, $file_object innehåller bara sista filen och du sorteras denna filens information.

Om du tittar på mitt första inlägg så ser du att din array ser ut så här:

$files\[0\] =\> array(...);
$files\[1\] =\> array(...);
$files\[2\] =\> array(...);
$files\[3\] =\> array(...);

Och du sorterar $files (sorterar 0,1,2,3) inte på namn eller något annat.

Du måste nog använda tekniken jag länkade till tidigare ( <http://www.the-art-of-web.com/php/sortarray/> ) och som även oskob hänvisade till.

Ett tips är att skriva "php aaa.php" så ser du direkt alla warningar som din kod genererar.

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

## #7 — Quid, 2010-06-22T09:10Z

Jo, jag tänkte lite fel där uppe, men det blir rätt ändå, troligtvis pga. att det är en inställning på servern som sorterar på namn som jag vill, har ett asp-konto hos samma ställe och där sorteras det på datum.

Men det kan ju vara vettigt att sortera själv ändå, i fall detta ändras i framtiden.
Jag ska kolla upp era länkar lite senare.

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

## #8 — Quid, 2010-06-22T09:53Z

> **[oskob skrev:](https://www.webforum.nu/p/1508679)**
>
> ```
> function mySort($a, $b)
> {
> 	return strnatcmp($a['name'], $b['name']);
> }
> 
> usort($files, "mySort");
> ```

Då får man problemet med att filer med stora bokstäver kommer först, jag ändrade till: 

```php
natcasesort($files, "mySort");
```

Och då blir det rätt igen, men jag vet ju inte om det blir rätt pga. koden eller för att servern ändå sorterar som jag vill  :p

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

## #9 — metalboy, 2010-06-22T10:12Z

> **[Quid skrev:](https://www.webforum.nu/p/1508686)**
>
> Då får man problemet med att filer med stora bokstäver kommer först, jag ändrade till: 
>
>
> ```php
> natcasesort($files, "mySort");
> ```
>
> 
> 
> Och då blir det rätt igen, men jag vet ju inte om det blir rätt pga. koden eller för att servern ändå sorterar som jag vill  :p

natcasesort() tar bara ett argument, så det är inte koden som gör att det blir rätt då. Däremot kan du använda **oskob**s kod men med ett litet tillägg, om du använder strtolower() så slipper du problemet med att filer med versala tecken kommer före filer med gemener.

```php
function mySort($a, $b)
{
	return strnatcmp(strtolower($a['name']), strtolower($b['name']));
}

usort($files, "mySort");
```

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

## #10 — Quid, 2010-06-22T10:56Z

Lysande, tack för all hjälp!

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

## #11 — Compusa, 2010-06-22T12:53Z

Ett annat ord för "dubbel-array" är matris. :)

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

---

Tråden på webben: https://www.webforum.nu/amne/php/183903-sortera-dubbel-array
