---
title: "Sorta multidimmensionell array"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/108477-sorta-multidimmensionell-array"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Peeer"
published: "2004-08-04T09:49:41.000Z"
updated: "2004-08-04T21:43:46.000Z"
replies: 4
views: 262
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/108477-sorta-multidimmensionell-array"
---

# Sorta multidimmensionell array

## #1 — Peeer, 2004-08-04T09:49Z

Hej!
Har en array som ser ut ungefär såhär

```
    [Willén, Joachim] => Array
        (
            [1] => Array
                (
                    [0] => 25:35.3
                    [1] => 0:00:00.0
                )

            [11] => Array
                (
                    [0] => 4:38:25.3
                    [1] => 0:15:44.4
                )

            [999] => Array
                (
                    [0] => 6:09:09.1
                    [1] => 0:22:55.1
                )

        )

    [Andersson, Björn] => Array
        (
            [1] => Array
                (
                    [0] => 25:39.6
                    [1] => 0:00:04.3
                )

            [11] => Array
                (
                    [0] => 4:22:43.9
                    [1] => 0:00:03.0
                )

            [999] => Array
                (
                    [0] => 5:57:19.4
                    [1] => 0:11:05.4
                )

        )
    [Sindballe, Torbjörn] => Array
        (
            [1] => Array
                (
                    [0] => 26:05.9
                    [1] => 0:00:30.6
                )

            [11] => Array
                (
                    [0] => 4:22:40.9
                    [1] => 0:00:00.0
                )

            [999] => Array
                (
                    [0] => 5:46:14.0
                    [1] => 0:00:00.0
                )

        )
```

Bakgrund: Arrayen är hämtad från en orienteringstävlingtävling där tiden för varje stämpling lagras. \['Andersson, Björn'\]\[11\]\[0\] är alltså tiden löparen stämplade vid kontroll 11 och \['Andersson, Björn'\]\[11\]\[1\] är tid efter ledaren vid den aktuella kontrollen. 

Uppgift: Jag vill nu sortera arrayen kronologiskt och skriva ut en resultatlista. Arrayen ska sorteras på värdena som finns i \['löparnamn'\]\[999\]\[0\] (eller \[1\]). I exemplet ska alltså 'Sindballe, Torbjörn' komma först, följt av 'Andersson, Björn' och sist 'Willén, Joachim'. Frågan är hur jag ska göra detta?

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

## #2 — Matte, 2004-08-04T10:38Z

Jag förstår inte riktigt vad \[999\]\[1\] ska jämföras med och när, kan du utveckla det lite ?

Tar vi bara hänsyn till \[999\]\[0\] skulle det kunna bli något på det här hållet:

```php
function cmp ($a, $b) {

   $a = str_pad($a[999][0], 10, '0', STR_PAD_LEFT);
   $b = str_pad($b[999][0], 10, '0', STR_PAD_LEFT);
   if ($a == $b) {
      return 0;
   }
   return $a < $b ? -1 : 1;

}

uasort($array, 'cmp');
```

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

## #3 — Peeer, 2004-08-04T21:01Z

\[999\]\[1\] är tid efter ledaren (dvs. personen som var snabbast får tiden 00:00:00.0 och löparna bakom får ett tal som är högre än det). Men det spelar ingen roll, man skulle kunna sortera på båda (den som har kortast tid i \[999\]\[0\] är ju onekligen snabbast) och din kod ovan ger ett korrekt resultat. Men vad gör den här raden egentligen?

```
 return $a < $b ? -1 : 1;
```

?

Följdfråga: En del löpare fullföljer av en eller annan anledning inte tävlingen, och kommer därför inte ha någon \[999\]. Hur gör man för att de som saknar detta index ska placeras sist i arrayen efter sorteringen?

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

## #4 — Matte, 2004-08-04T21:18Z

```php
return $a < $b ? -1 : 1;
```

 
är samma sak som

```php
if ($a < $b) {
   return -1;
} else {
   return 1;
}
```

Hur du löser det andra hänger lite ihop med hur du hanterar det från början, men du kan alltid göra så att du loopar igenom arrayen och plockar ut de som inte fullföljt.
Sen om du vill sortera dessa efter namn eller mellantid blir sedan upp till dig.

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

## #5 — Peeer, 2004-08-04T21:43Z

Aok, varje dag lär man sig något nytt. Håller på med sorteringen av de som ej fullföljt nu, borde klara av det själv :)

Tack för hjälpen :)

/r Jo just ja. Om jag vill lägga in hela köret i en class, hur gör jag då med 

```
uasort($resultArray, 'cmp');
```

? Vad ska det stå istället för cmp (cmp-funktionen ligger i klassen)?

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

---

Tråden på webben: https://www.webforum.nu/amne/php/108477-sorta-multidimmensionell-array
