Sorteren van een multi-dimensionale array

Stel je hebt de volgende array: (Result van een print_r)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Niels
        )
 
    [1] => Array
        (
            [id] => 2
            [name] => Arend
        )
 
    [2] => Array
        (
            [id] => 3
            [name] => Danil
        )
 
    [3] => Array
        (
            [id] => 4
            [name] => Hendrik
        )
)


Nu wil je die array op basis van de 'name' alfabetisch gaan sorteren. Via onderstaande manier gaat dit (zeer) gemakkelijk!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$jouwArray
= array(); // Je huidige gevulde multi-array
uasort($jouwArray, 'arraySort');

function
arraySort($a, $b)
{

      return strcmp($a['name'], $b['name']);
}


?>


Het resultaat van het bovenstaande is dan als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Array
(
    [0] => Array
        (
            [id] => 2
            [name] => Arend
        )
 
    [1] => Array
        (
            [id] => 3
            [name] => Danil
        )
 
    [2] => Array
        (
            [id] => 4
            [name] => Hendrik
        )
 
    [3] => Array
        (
            [id] => 1
            [name] => Niels
        )
)


Wat doet nu precies usort ? De eerste letter van de functie zegt het eigenlijk al. Het sorteren van een array op basis van een door de gebruiker gedefinieerde functie. (Wordt als tweede parameter opgegeven)

Vervolgens voert usort dus de functie 'arraySort(..)' uit. In die functie wordt gebruik gemaakt van de functie strcmp. Die doet eigenlijk niets anders dan een binaire string vergelijken. usort zelf zorgt er dan voor dat het resultaat alfabetisch wordt gesorteerd.

Wanneer je de 'vergelijkings' functie zelf zou moeten schrijven kom je ongeveer op zoiets uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

function comparison($a, $b)
{

    if ($a == $b) {
        return 0;
    }

    return ($a < $b) ? -1 : 1;
}


?>


Wat je ook kan doen is de functie schrijven als een closure. (Zie hier voor meer informatie)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

$jouwArray
= array(); // Je huidige gevulde multi-array
uasort($jouwArray, function ($a, $b)
{

      return strcmp($a['name'], $b['name']);
});


?>


Andere mogelijkheden? Bekijk de volgende links eens:

- uasort
- uksort
- array_multisort

Zoals ik al zei een kleine tutorial. Meer informatie lijkt mij niet nodig. Ik hoop dat je hiermee uit de voeten kan!

Bedankt voor het lezen en wanneer je nog vragen hebt hoor ik dat graag!

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Sorteren van een multi-dimensionale array

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.