Sorteren van niveaus

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Ik ben momenteel bezig aan een stuk code dat "competenties" moet tonen. Deze competenties hebben allemaal een prefix.

bijvoorbeeld:
1.1 De student kan een algoritme opstellen, gebruik makend van logische principes
1.2 De student heeft kennis van in de praktijk veelgebruikte algoritmes en datastructuren

Ik zou graag willen sorteren op deze prefix, zodat alles netjes word gesorteerd volgens niveau.
1
1.1
1.1.1
1.1.2
2
2.1

Het probleem is dat in php er geen sorteer functie bestaat die rekening houd met de lengte van de prefix. Dit heeft dus tot gevolg dat het bovenstaande stuk er als volgt uitziet.

1
2
1.1
2.1
1.1.1
1.1.2

Mijn kortste prefixen worden dus eerst gesorteerd, en daarna de langere prefixen. Ik heb al alle flags (SORT_REGULAR, SORT_NUMERIC, etc.) geprobeerd toe te voegen. Maar niets werkt...

Kan iemand mij hiermee helpen?

Grtz,

foeZz

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 16:02
Handmatig sorteren misschien? Moet goed te doen zijn lijkt me. Met een beetje werk hoef je ook maar één loopje te gebruiken.

Acties:
  • 0 Henk 'm!

  • MrJay
  • Registratie: Juni 2004
  • Laatst online: 24-10-2024
Wat je hier wil wordt wel eens omschreven als "natural sort", de manier waaorp mensen intuitief zouden sorteren. Met deze zoekterm en wat gegoogle vind je zeker wat je nodig hebt.

Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 13:24

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Caelorum schreef op vrijdag 28 mei 2010 @ 11:02:
Handmatig sorteren misschien? Moet goed te doen zijn lijkt me. Met een beetje werk hoef je ook maar één loopje te gebruiken.
Dan zou ik eerder een eigen compare functie knutselen en die aan een standaard sorteerfunctie van php voeren, tenminste, ik neem aan dat php daar mogelijkheden voor biedt?

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • Xander
  • Registratie: Oktober 2002
  • Laatst online: 05:51
Als ik het als string in een array prop en sort() gebruik komt het er uit zoals jij wilt?

PHP:
1
2
3
4
5
<?php
$arr = Array('1', '2', '1.1', '2.1', '1.1.1', '1.1.2');
sort($arr);
print_r($arr);
?>


geeft

code:
1
2
3
4
5
6
7
8
9
Array
(
    [0] => 1
    [1] => 1.1
    [2] => 1.1.1
    [3] => 1.1.2
    [4] => 2
    [5] => 2.1
)
Orion84 schreef op vrijdag 28 mei 2010 @ 11:07:
[...]

Dan zou ik eerder een eigen compare functie knutselen en die aan een standaard sorteerfunctie van php voeren, tenminste, ik neem aan dat php daar mogelijkheden voor biedt?
Jawel, usort().

PC specs!---Pulse mee voor GoT!
[22:49:37] <@Remy> ik wil een opblaasbare dSLR :+


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Xander schreef op vrijdag 28 mei 2010 @ 11:10:
Als ik het als string in een array prop en sort() gebruik komt het er uit zoals jij wilt?

PHP:
1
2
3
4
5
<?php
$arr = Array('1', '2', '1.1', '2.1', '1.1.1', '1.1.2');
sort($arr);
print_r($arr);
?>


geeft

code:
1
2
3
4
5
6
7
8
9
Array
(
    [0] => 1
    [1] => 1.1
    [2] => 1.1.1
    [3] => 1.1.2
    [4] => 2
    [5] => 2.1
)



[...]


Jawel, usort().
Dit werkt inderdaad voor een 1 dimensionale array, maar niet voor een multidimensionale. Ik heb mijn fout kunnen oplossen door middel van de natsort trouwens. Toch hartelijk bedankt =)
Pagina: 1