[PHP] array sorteren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 00:18
Beste luitjes,

Ik heb ben bezig de resultaten van een enquête zichtbaar te maken. Bij de enquete kiest men eerst voor de gemeente, daarna voor de politieke partij. Hierna vult men vragen in, en er komt een score uit. Nu wil de opdrachtgever bij het algemene resultaat de hoogste en de laagst gescoorde partij hebben.

Ik heb nu een query waarmee ik dmv sum de totalen van de ingevoerde vraag heb.

Dit verwerk ik tot een array, wat bijvoorbeeld een dergelijk resultaat heeft:

code:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Array
(
    [0] => Array
        (
            [gid] => 13
            [gtitle] => Enkhuizen
            [scores] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [value] => 1
                        )

                )

        )

    [1] => Array
        (
            [gid] => 21
            [gtitle] => Alkmaar
            [scores] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [value] => 2
                        )

                    [1] => Array
                        (
                            [id] => 1
                            [value] => 4
                        )

                )

        )

)

Nu wil ik de array score sorteren op score[][value], maar met de functie array_multisort() kom ik er niet, ik kan niet kiezen om te sorteren op die value. Heeft iemand enig idee hoe ik dit moet aanpakken, en of ik misschien beter een andere array structuur kan maken?

|>


Acties:
  • 0 Henk 'm!

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 08:47

Eelke Spaak

- Vlad -

Ik begrijp dat je je overkoepelende array wil sorteren op de som van alle scores[][value] ? Dan zou ik gewoon een sorteeralgoritme pakken, en dat omschrijven zodat 'ie als criterium niet de elementen van de array zelf pakt maar een som berekent over de scores[][value] en dat als criterium voor sorteren pakt. Het uiteindelijke effect (omwisselen van elementen bv.) moet je dan natuurlijk wel weer in de overkoepelende array doen.

TheStreme - Share anything with anyone


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 00:18
Eelke Spaak, ik begrijp niet precies hoe je dat bedoelt, met array_multisort kan ik dus niet bepalen wat ik precies sorteer, wel meerdere arrays, maar niet waarop :/

|>


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Je kunt ook in je query de laagste / hoogste score bepalen, dat lijkt me makkelijker :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//laagste score:
SELECT MEAN(`beoordeling`) as `score` 
FROM table 
GROUP BY `gemeente` 
ORDER BY `score` ASC 
LIMIT 1


//hoogste score
SELECT MEAN(`beoordeling`) as `score` 
FROM table 
GROUP BY `gemeente` 
ORDER BY `score` 
DESC LIMIT 1

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 15-06 23:12
Zal vast ook een andere methode zijn, maar ik zou gewoon een tempArray aanmaken met alleen de values erin... Dus in jouw geval :
PHP:
1
2
3
4
5
6
tempArray = array();
for ($i=0; $i<=(count(Array)); $i++) {
  for ($j=0; $j<=(count(Array[$i][scores])) {
    tempArray[$j] = Array[$i][scores][$j][value];
  }
}


En klaar is de spreekwoordelijke Kees ... :)

Iedereen wil terug naar de natuur, maar niemand wil lopend...


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 00:18
T-MOB schreef op zaterdag 14 januari 2006 @ 11:25:
Je kunt ook in je query de laagste / hoogste score bepalen, dat lijkt me makkelijker :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//laagste score:
SELECT MEAN(`beoordeling`) as `score` 
FROM table 
GROUP BY `gemeente` 
ORDER BY `score` ASC 
LIMIT 1


//hoogste score
SELECT MEAN(`beoordeling`) as `score` 
FROM table 
GROUP BY `gemeente` 
ORDER BY `score` 
DESC LIMIT 1
dan heb ik heb vrij veel query's bij zo'n 100 gemeentes, lijkt mij niet helemaal handig, daarnaas moet ik ook een sum doen hé, want ik moet eerst een sum hebben van een de tabel met vraag_id, partij_id, gemeente_id.

Dat komt neer op ongeveer deze query
SQL:
1
2
3
4
5
6
7
8
9
10
SELECT
    g.id AS gemeenteid,
    g.name AS gemeente,
    p.name AS partij,
    p.id AS partijid, 
    sum( r.vraag_value ) AS partij_score
FROM `g_p2vraag` r
    LEFT JOIN partij p ON p.id = r.partij_id
    LEFT JOIN gemeente g ON g.id = r.gemeente_id
GROUP BY r.partij_id, r.gemeente_id

[ Voor 4% gewijzigd door simon op 14-01-2006 11:33 ]

|>


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Kijk eens naar usort

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Simon schreef op zaterdag 14 januari 2006 @ 11:33:
dan heb ik heb vrij veel query's bij zo'n 100 gemeentes, lijkt mij niet helemaal handig, daarnaas moet ik ook een sum doen hé, want ik moet eerst een sum hebben van een de tabel met vraag_id, partij_id, gemeente_id.
Als je score een totaal is moet je idd een SUM doen, mij leek het zinniger om het gemiddelde te weten. Maar goed dan nog kun je in je query gewoon sorteren op score en dan heb je het probleem niet. Vwb het aantal queries zijn twee natuurlijk genoeg als je alleen de hoogste en de laagste wil weten, als je ze allemaal nodig hebt kan het in 1 query.

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 00:18
dat werkt perfect, enorm bedankt :)

|>

Pagina: 1