login  Naam:   Wachtwoord: 
Registreer je!
 Forum

sort() voor meerdimensionale arrays

Offline Emonk - 03/01/2011 16:22
Avatar van EmonkLid Heya,

Ik heb de volgende array (voorbeeld):
$array["jaar"]["maand"]["dag"]["beschrijving"]

Nu wil ik met sort() de array zo sorteren dat die eerst op jaar, dan op maand, dan op dag en dan eventueel nog op beschrijving wordt gesorteerd, allen oplopend.
Hoe doe ik dit?

4 antwoorden

Gesponsorde links
Offline Sam - 03/01/2011 21:23
Avatar van Sam PHP expert Met sort() gaat dat niet lukken, omdat sort() sorteert op de waarde die je aan een bepaalde (multidiminsionale) sleutel toewijst.

Als je array er bijvoorbeeld zo uit ziet:
$array[2010][5][27]["Weet ik veel"] = "Foo";
$array[2011][10][27]["Iets anders"] = "Bar";

Zal sort() je array op de volgende manier sorteren:
$array[2011][10][27]["Iets anders"] = "Bar";
$array[2010][5][27]["Weet ik veel"] = "Foo";

Wat jij kan doen is de array manueel doorlopen, de sleutels vergelijken en op basis daarvan sorteren maar ik zou dan wel de beschrijving als toegewezen waarde kiezen:
$array[2011][5][27] = "Iets anders";
$array[2010][10][27] = "Weet ik veel";

  1. foreach($array as $jaar => $sub)
  2. {
  3. foreach($sub as $maand => $subTwee)
  4. {
  5. foreach($subTwee as $dag => $desc)
  6. {
  7. //
  8. }
  9. }
  10. }


Op deze manier geraak je aan alle keys en kan je dus een sorteeralgoritme schrijven of implementeren.

Hier vind je een voorbeeld van een sorteeralgoritme dat je kan helpen bij het oplossen van je probleem: QuickSort
Offline avdg - 04/01/2011 12:41
Avatar van avdg PHP gevorderde Ik denk dat je een betere zaak doet als je je array-structuur zoveel mogelijk versimpeld, door bv. seconden te gebruiken. In dat geval heb je minder werk met het sorteren van je array. Php zelf heeft een uitgebreide set aan datum en tijdfuncties om de nodige omzettingen te doen.
Offline Maarten - 04/01/2011 15:54
Avatar van Maarten Erelid Als je oplopend door je keys gaat lopen is ie zowieso al gesorteerd met die indeling hé En je laatste array kan je dan gewoon door sort() halen aangezien je dan strings alfabetisch gaat zetten.
Offline Emonk - 04/01/2011 17:12 (laatste wijziging 04/01/2011 17:12)
Avatar van Emonk Lid de array was slechts een voorbeeld, zoals gezegd. De echte array is het volgende:

$hot[een gewoon oplopend getal: 0,1,2,etc]["day"] = dag
$hot[een gewoon oplopend getal: 0,1,2,etc]["month"] = maand
$hot[een gewoon oplopend getal: 0,1,2,etc]["descr"] = beschrijving

de array $hot moet dus gesorteerd worden op maand, dag, beschrijving oplopend.

Ik kon de eerste oplossing niet volgen, is die toelichtbaar?
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.213s