[PHP] Array sorteren; keys onderaan plaatsen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Duroth
  • Registratie: Juni 2007
  • Laatst online: 27-04-2016

Duroth

No rest for the tweaked

Topicstarter
Ik heb een multidimensionale array waarmee ik een tabel van data wil voorzien.
De globale opzet ervan is
PHP:
1
$table['rowname']['colname'] = int;

Hierbij is 'rowname' een array met gemeentes, en 'colname', welke voor mijn probleem niet van toepassing is, een array met kolommen.

Het aantal kolommen staat vast, het aantal rijen niet. Er kunnen 2 gemeentes zijn, of 5, maar er zijn ook twee mogelijke afwijkende waardes: 'onbekend' en 'geen waarde'.

Bij het alfabetisch sorteren van de array komen deze rijen ergens in het midden terecht. Dit is onoverzichtelijk, dus ik wil ze graag naar onderen verplaatsen.

Maar omdat de naam van de key van belang is (deze geeft immers aan om welke gemeente het gaat), moet de key wel behouden blijven.

Wie weet er hoe ik, met behoud van keys, een array zo kan sorteren dat twee (bekende) keys onderaan worden geplaatst?
Zelf denk ik dat de PHP-functie uksort() van pas kan komen, maar helaas weet ik niet waar te beginnen. Weet er iemand in welke richting ik moet zoeken?

Acties:
  • 0 Henk 'm!

  • jealma
  • Registratie: Mei 2003
  • Niet online

jealma

Jesus is Lord!

(overleden)
Als je een array wilt sorteren met behoudt van keys denk ik dat je eerst een copy van de desbetreffende array moet maken, en die copy dan gaan sorteren.

Een multidimensional array sorteren doe ik op de volgende manier:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$array[]=array('rowname' => rownaam, 'colname' => colnaam, 'value' => waarde);
$array[]=array('rowname' => rownaam, 'colname' => colnaam, 'value' => waarde);
$array[]=array('rowname' => rownaam, 'colname' => colnaam, 'value' => waarde);

foreach ($array as $key => $row) {
    $column[$key] = $row[$kolomdiegesorteerdmoetworden];
}

array_multisort($column, SORT_ASC, $array);

foreach($array as $waarde) {
    foreach($waarde as $key => $value) {
        $$key=$value;
    }
    echo $key . " | " . $value;
}

Hierbij moet je dan bij $kolomdiegesorteerdmoetworden de kolom opgeven die je wilt sorteren. Met SORT_ASC of SORT_DESC kun je dan ascending of descending sorteren. Er zijn dan volgens mij ook mogelijkheden om een eigen sorteerformule op te geven, zoals de uksort()-functie die je aangaf.

Avalon, Fireflight, Gaither, Point of Grace, Third Day
C2D E6400 @ 3GHz - Zalman CNPS8000 - GA-P35-DS3 - Corsair 2GB ram - Asus 9400GT - OCZ Vertex 30GB
Archlinux 64-bit + Awesome