Sorteren van een multi-dimensionale array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter  paul

peter paul

12/12/2012 20:19:33
Quote Anchor link
Ik had deze tutorial hier op PHPhulp gevonden. Ik had daar een comment geplaatst, waarin ik vroeg of het ook mogelijk was een key mee te geven zodat ik de functie niet met de hand hoef te wijzigen. Ik kreeg daar een reactie maar om het allemaal een beetje overzichtelijk te houden zal ik hier verder gaan.

Zelf heb ik dit geprobeerd maar krijg de volgende fout meldingen:
Notice: Undefined variable: key in C:\...\test.php on line 5
Notice: Undefined index: in C:\...\test.php on line 5

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
<?php
function sorter($array, $key){

     return uasort($array, function ($a, $b) {
                               return strnatcmp($a[$key], $b[$key]);
                           });
}


$array = sorter($array, 'name');    

echo '<pre>';
print_r($array);
echo '</pre>';
?>


Doe ik iets fout? Moet het op een andere manier?
Gewijzigd op 12/12/2012 20:47:31 door Peter paul
 
PHP hulp

PHP hulp

28/03/2024 17:04:42
 
Aad B

Aad B

12/12/2012 21:15:24
Quote Anchor link
Je programma is incompleet of heb je niet alles geplaatst?
De eerste melding geeft aan dat $key onbekend is
De tweede melding is het vervolg op de eerste.
 
Niels K

Niels K

12/12/2012 21:27:24
Quote Anchor link
Hallo Peter,

Dit is de correcte manier om de key te gebruiken. (Zie ook het commentaar van Wouter J in de tutorial)

Klik hier voor meer informatie over het gebruik van anonymous functions.

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

$key
= 'name';
$jouwArray = array(...); // Je huidige gevulde multi-array

// met use ($key) importeren we de key in de functie

uasort($jouwArray, function ($a, $b) use ($key)
{

      return strcmp($a[$key], $b[$key]);
});
Gewijzigd op 12/12/2012 21:31:53 door Niels K
 
Wouter J

Wouter J

12/12/2012 22:29:49
Quote Anchor link
Dus om het om te zetten naar een functie:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function sorter(&$array, $key) {
    uasort($array, function ($a, $b) use ($key) {
        return strcmp($a[$key], $b[$key]);
    });
}


// in gebruik
$array = array(...); // je multi-dimensionale array
sorter($array, 'de-key');

var_dump($array); // de gesorteerde array
?>
Gewijzigd op 12/12/2012 22:30:47 door Wouter J
 
Peter  paul

peter paul

13/12/2012 10:27:05
Quote Anchor link
Bedankt voor de reacties, ik heb jou functie gebruikt wouter. Maar ik wil natuurlijk ook begrijpen wat ik nou verkeerd deed. Ik heb daarom ook twee vraagjes.

- Waarom staat & voor de $array
- Waarom moet ik "use ($key)" in de functie gebruiken.
 
Roy -

Roy -

13/12/2012 12:32:35
Quote Anchor link
De & zorgt ervoor dat $array niet geleegd wordt maar blijft bestaan. Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$array = $array + array('nieuwe items');

De use ($key) zorgt ervoor dat de $key uit de sorter functie gebruikt kan worden in de anonieme functie.
 
Kris Peeters

Kris Peeters

13/12/2012 13:55:12
Quote Anchor link
Peter paul op 13/12/2012 10:27:05:
- Waarom staat & voor de $array


Dat heet: variabelen doorgeven "by reference".
http://php.net/manual/en/language.references.pass.php

Daarbij ga je die variabele niet meer returnen. De aanpassing die binnen de functie gebeurt, wordt ook doorgevoerd buiten de functie.

Jij hebt
$array = sorter($array, 'name');

Als je het by reference doet, heb je
sorter($array, 'name');
Gewijzigd op 13/12/2012 13:55:40 door Kris Peeters
 



Overzicht Reageren

 
 

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.