[php] Array sort probleem *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de volgende arrays (verkregen uit mysql query):

$all_id[]=$row[0];
$all_titel[]=$row[1];
$all_positie[]=$row[2];
$all_type[]=$row[3];
$all_image[]=$row[4];
$all_imagewidth[]=$row[5];
$all_html[]=$row[6];
$all_kolom[]=$row[7];

Nu wil ik $all_positie oplopend gaan sorteren, maar alle overige
arrays moeten "meegesorteerd" worden. Dus de uiteindelijke
keyindex van $all_positie moet ook gelden voor alle andere arrays.

Maar hoe krijg ik voor elkaar dat de volgorde mee veranderd met de
sortatie die ik uitvoer op $all_positie?

Ik heb zelf al zitten denken aan multidimensionale arrays waar ik alle arrays
als het ware in stop en dan alles in 1 keer sorteer. Maar ik zou dan een 7-dimensionale array moeten aanmaken om alle values in kwijt te kunnen en dat word een beetje onoverzichtelijk en lastig. (als het uberhaupt kan)

Dus wellicht op een andere wijze?

[ Voor 9% gewijzigd door Verwijderd op 30-10-2003 09:51 ]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18-09 17:06

gorgi_19

Kruimeltjes zijn weer op :9

(tenzij op een of andere manier meerdere sorts kunnen plaatsvinden
in 1 query.)
SQL:
1
(...) ORDER By Kolom1 Asc, Kolom2 Desc

:?

[ Voor 3% gewijzigd door gorgi_19 op 30-10-2003 09:49 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
sorry, sorten in de mysql in n.v.t
Het gaat echt om het sorten van de arrays en de koppeling van de keys met
de andere arrays. Moet dit persé met multidimensionale arrays?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Heel makkelijk. ;)

Ben geen PHP held, maar ik kan dit wel met andere talen, PHP moet dit vast ook kunnen.

Je maakt een kopie van alle arrays. Alle Arrays zijn even lang. Dat is je voordeel.
Vervolgens sorteer je de $all_positie in het origineel.
Daarna maak je een for loop voor elke element van $all_positie, waarbij je de index van het gelijkwaardige element van de kopie opzoekt. Die index gebruik je om alle waardes op te halen en die kun je dan weer op de goede plek in het origineel neerplempen.

Als je de 1e sort met een leuk efficient algoritme doet, dan is het vervolgens O tijd om de bijbehorende waardes te vullen. Kan vast iets efficiënter, maar het werkt.

Overigens ben ik het met gorgi_19 eens dat deze zin:
Ik heb de volgende arrays (verkregen uit mysql query):
Schreeuwt om aanpassing van die query.

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thanks! W.b.t de query heb je gelijk. Echter had ik dit probleem ook met arrays zonder dat de waardes uit mysql kwamen. En aan de keyindex had ik eerlijk gezegd nog niet gedacht....gracias :)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op 30 oktober 2003 @ 11:21:
thanks! W.b.t de query heb je gelijk. Echter had ik dit probleem ook met arrays zonder dat de waardes uit mysql kwamen. En aan de keyindex had ik eerlijk gezegd nog niet gedacht....gracias :)
You're welcome.

{signature}


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

* titelfix (taal ertussen gevrot, denk daar voortaan zelf aan)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 01-08 12:04

WormLord

Devver

En als je het echt niet met SQL opgelost krijgt, kijk dan eens hier: http://nl.php.net/array_multisort

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Voutloos schreef op 30 oktober 2003 @ 10:18:
Heel makkelijk. ;)

Ben geen PHP held, maar ik kan dit wel met andere talen, PHP moet dit vast ook kunnen.

Je maakt een kopie van alle arrays. Alle Arrays zijn even lang. Dat is je voordeel.
Vervolgens sorteer je de $all_positie in het origineel.
Daarna maak je een for loop voor elke element van $all_positie, waarbij je de index van het gelijkwaardige element van de kopie opzoekt. Die index gebruik je om alle waardes op te halen en die kun je dan weer op de goede plek in het origineel neerplempen.

Als je de 1e sort met een leuk efficient algoritme doet, dan is het vervolgens O tijd om de bijbehorende waardes te vullen. Kan vast iets efficiënter, maar het werkt.
Nog minder PHP held, maar dit gaat niet werken in O(N). Je moet namelijk O(N) elementen opzoeken, en elk element opzoeken in een list van N items kost je O(N) tijd. Totaal is dus O(N2).

De wel erkende methode is zelf je sort algoritme uitschrijven. Als je dan de elementen i en j van $all_positie hebt bepaald die je moet swappen, dan swap je niet alleen elementen i en j van die array, maar van alle array. Tip: google:introsort

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

array_multisort() can be used to sort several arrays at once or a multi-dimensional array according by one of more dimensions. It maintains key association when sorting.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1