Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[php] Moet ik dit met een array doen?

Pagina: 1
Acties:

Onderwerpen


  • pim
  • Registratie: Juli 2001
  • Laatst online: 22-11 12:57
Ik heb een lijstje met namen in een array:

jan
mark
jan
piet
piet
piet
jan


Nu wil ik ze groeperen, en sorteren op meest voorkomende:

piet 4
jan 3
mark 1

In mysql zou het simpel zijn:

MySQL:
1
SELECT naam,count(*) AS aantal FROM `table` GROUP BY naam ORDER BY aantal DESC


Met PHP krijg ik het wel in een Array, met de juiste getallen erbij.. Maar ik kan het niet sorteren, en echo'en...
Ondank dat het er bruikbaar uitziet heb ik er niet zoveel aan:

PHP:
1
2
3
4
5
6
Array
(
    [jan] => 3
    [mark] => 1
    [piet] => 4
)


Is een Array ervoor bedoelt om het zo te gebruiken, of moet ik het in een andere richting zoeken?
Ik kan het ook wegschrijven naar mysql, maar er moet toch een nettere methode voor zijn..

[ Voor 3% gewijzigd door pim op 20-01-2011 07:19 ]


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Waarom kan je niet sorteren? Of echo'en? Ik zie niet echt wat je probeert te doen en waarom dat niet lukt.

[ Voor 26% gewijzigd door CodeCaster op 16-01-2011 15:09 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
pim schreef op zondag 16 januari 2011 @ 15:06:
Maar ik kan het niet sorteren, en echo'en...
Waarom niet :?
Je kunt een array gewoon sorteren (op key danwel value) hoor :? En waarom zou je niet kunnen echo'en? :?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • dragontje124
  • Registratie: Mei 2009
  • Laatst online: 11-10 18:48
eerst array_count_values() gebruiken op je eerste array (http://nl3.php.net/manual/en/function.array-count-values.php)

en daarna bijv asort() eroverheen (http://php.net/manual/en/function.asort.php)
edit: of zeg ik nu teveel?

[ Voor 6% gewijzigd door dragontje124 op 16-01-2011 15:11 ]


  • pim
  • Registratie: Juli 2001
  • Laatst online: 22-11 12:57
Het is me nu gelukt om te sorteren, en uit te printen..
Omslachtig :) maar het werkt..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Comparison function
function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a > $b) ? -1 : 1;
}

// Sort and print the resulting array
uasort($bijnamen, 'cmp');


foreach($bijnamen as $naam => $aantal) {
echo "$naam ($aantal)<br>";
}


Ik dacht even dat ik een array misschien op de verkeerde manier gebruikte.. Maar het werkt.

dragontje124, dat idd de netste oplossing!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 19:53
In principe is dat toch niet omslachtig? In dit geval kan het echter wel korter, want je implementeert nu zelf arsort() m.b.v. uasort en een hulpfunctie. Maar je kunt zelfs van PHP niet verwachten dat-ie alle mogelijke sorteer- en printfuncties ingebakken heeft. (Verder zou ik bij de foreach ook nog even inspringen en variabelen niet binnen de aanhalingstekens laten.)
offtopic:
Eigenlijk wel.

  • YopY
  • Registratie: September 2003
  • Laatst online: 06-11 13:47
Raynman schreef op zondag 16 januari 2011 @ 15:58:
[...] en variabelen niet binnen de aanhalingstekens laten.
Hoezo? Ik lees liever "asdf $dinges sdfa" of "asdf {$dinges} sdfa" dan één van de alternatieven zoals "asdf " . $dinges . " sdfa", en qua performance zal het verschil triviaal zijn. Nog een derde alternatief zou printf("asdf %s sdfa", $dinges); zijn, maar ik geloof zo dat de binnen-aanhalingstekens notatie syntactische suiker is voor een (s)printf aanroep.

Stijlvoorkeur etc.

@topic, waarom werkt ORDER BY aantal niet? Al uitgezocht?

  • pim
  • Registratie: Juli 2001
  • Laatst online: 22-11 12:57
Omdat de data niet uit mysql komt.. :)


Nette code doe ik alleen bij scripts die ik ooit nog ga hergebruiken, of die onderhoud nodig hebben....

[ Voor 58% gewijzigd door pim op 16-01-2011 16:59 ]


  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 15:58
YopY schreef op zondag 16 januari 2011 @ 16:40:
[...]


Hoezo? Ik lees liever "asdf $dinges sdfa" of "asdf {$dinges} sdfa" dan één van de alternatieven zoals "asdf " . $dinges . " sdfa", en qua performance zal het verschil triviaal zijn. Nog een derde alternatief zou printf("asdf %s sdfa", $dinges); zijn, maar ik geloof zo dat de binnen-aanhalingstekens notatie syntactische suiker is voor een (s)printf aanroep.

Stijlvoorkeur etc.
Het is niet altijd alleen maar een andere syntax. Bij arrays bijvoorbeeld voorkom je dat 'test' in $arr[test] gezien wordt als constante door er accolades ({}) omheen te zetten, wat resulteert in een performance gain :)

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Echt enorm ja, het scheelt toch zeker een microseconde als er twaalfduizend van zulke constructies op een pagina staan. ;)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 15:58
CodeCaster schreef op zondag 16 januari 2011 @ 17:22:
[...]

Echt enorm ja, het scheelt toch zeker een microseconde als er twaalfduizend van zulke constructies op een pagina staan. ;)
Geen idee, nooit gemeten. Ik ken alleen de theorie erachter :)
Pagina: 1