[PHP] array multisort in een functie zetten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 07:57

Kaastosti

Vrolijkheid alom!

Topicstarter
Om een multidimensionaal array te sorteren op een bepaalde kolom kun je het beste uasort($array, "function") gebruiken. Deze werkt goed en ik krijg inderdaad netjes een gesorteerd array terug op de geselecteerde kolomnaam. De code die ik hiervoor gebruik is deze:
PHP:
1
2
3
4
5
6
7
function cmp($a, $b)
{
    global $kolom;
    return strcmp(strtolower($a[$kolom]), strtolower($b[$kolom]));
}
$kolom = 'name';
uasort($devices, "cmp");

Prachtig, dat werkt. Wat is echter wil bereiken is dat ik het bovenstaande geheel in een aparte functie dump, waaraan ik als argumenten een array en een kolomnaam meegeef. En zoals je zult begrijpen moet het array dan gesorteerd worden op die kolom. Het wil me maar niet lukken, waarschijnlijk gaat het mis met die globale waarde, maar ik zie niet waar ik die anders kwijt moet... met deze code werkt het dus helaas niet:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function multisort($array, $column)
{
    function cmp($a, $b)
    {
        global $kolom;
        return strcmp(strtolower($a[$kolom]), strtolower($b[$kolom]));
    }
    $kolom = $column;
    uasort($array, "cmp");
    return $array;
}
$array = multisort($array, 'name');

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • GambitRS
  • Registratie: Juni 2001
  • Laatst online: 13-06-2013

GambitRS

w00t

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function cmp($a, $b)
{
    global $kolom;
    return strcmp(strtolower($a[$kolom]), strtolower($b[$kolom]));
}

function multisort($array, $column)
{
    $kolom = $column;
    uasort($array, "cmp");
    return $array;
}
$array = multisort($array, 'name');


en zo?

MechWarrior || Monsters Game


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 21-09 12:54
Waarom doe je een function in een function en waarom maak je gebruik van een global? Kun je die variabelen niet gewoon als parameter doorgeven?

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 07:57

Kaastosti

Vrolijkheid alom!

Topicstarter
en zo?
Nee helaas, dan sorteert hij ze niet
Waarom doe je een function in een function en waarom maak je gebruik van een global? Kun je die variabelen niet gewoon als parameter doorgeven?
Functie in functie omdat die "cmp" alleen daar gebruikt wordt. Het is misschien niet heel erg OO-minded, maar werkt wel :)

En die global omdat het me nog niet gelukt is bij het aanroepen van de functie "cmp" in uasort een argument mee te geven. Zodoende heb ik dus geen invloed op de functie, dus kan ik ook die $kolom niet als argument er extra bij zetten :)

[ Voor 15% gewijzigd door Kaastosti op 20-05-2005 12:29 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • mr_obb
  • Registratie: Juni 2001
  • Laatst online: 01-09 14:15

mr_obb

Lakse Perfectionist

Is dit misschien nuttig voor je?

To sort multidimentional arrays .... by one key.
PHP:
1
2
3
4
5
function multi_sort($tab,$key){
   $compare = create_function('$a,$b','if ($a["'.$key.'"] == $b["'.$key.'"]) {return 0;}else {return ($a["'.$key.'"] > $b["'.$key.'"]) ? -1 : 1;}');
   usort($tab,$compare) ;
   return $tab ;
}

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 07:57

Kaastosti

Vrolijkheid alom!

Topicstarter
Is dit misschien nuttig voor je?
Waar tover je die vandaan? Met een klein beetje aanpassen is dit inderdaad precies wat ik zoek :)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.

Pagina: 1