Toon posts:

[PHP] Array, hoe deze (3d) sorteren?

Pagina: 1
Acties:
  • 48 views sinds 30-01-2008

Verwijderd

Topicstarter
heb search gebruikt, op php.net net gekeken etc. maar ik kom er nog steeds niet uit.

De volgende array moet gesorteerd worden:
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
    [100] => Array
      (
        [1] => Array
            (
              [ID] => 1
              [VALUE] => Mies
            )

        [2] => Array
            (
              [ID] => 2
              [VALUE] => Aap
             )
        [4] => Array
            (
              [ID] => 4
              [VALUE] => Noot
             )

      )
    [200] => Array
      (
        [1] => Array
            (
              [ID] => 1
              [VALUE] => Kaas
            )
        [2] => Array
            (
              [ID] => 2
              [VALUE] => Pizza
            )
        [4] => Array
            (
              [ID] => 4
              [VALUE] => Friet
            )

      )

Nu is het de bedoeling dat dus of op aap, noot, mies kan gesorteren of dat je op Fies, Pizza sorteerd.

Tevens is het de bedoeling dat als je op aap, noot, mies heb gesorteerd dat de andere: Pizza en Friet word.

ff hoe het er uit moet komen te zien (gesorteerd op 100)
code:
1
2
3
4
5
100  |  200
__________|___________
Aap  |  Pizza
Noot    |   Friet
Mies    |   Kaas

edit:
bla1 is nu 100 en bla2 is nu 200.



Hoe doe dat??

2e stap mag ook los, gaat er mij in eerste instantie om dat ik kan sorteren.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Met usort().

Rustacean


  • Grum
  • Registratie: Juni 2001
  • Niet online
je kan niet sorteren op '200' of wat dan ook .. je kan alleen maar sorteren op volgorde (alfabetisch/numeriek/etc)

daarnaast klopt je voorbeeld ook niet echt als jij 'gesorteerd' hebt op 200 ...

maar dit kan inderdaad met usort ..

  • Bpje
  • Registratie: November 2000
  • Laatst online: 30-08 14:53
Idd met usort()
Usort
PHP:
1
<?function cmp ($a, $b) {    if ($a == $b) return 0;    return ($a > $b) ? -1 : 1;}$a = array (3, 2, 5, 6, 1);usort ($a, "cmp");while (list ($key, $value) = each ($a)) {    echo "$key: $value\n";}?>

In de functie cmp kun je je eigen vergelijking maken.
>:)

Verwijderd

Topicstarter
Op dinsdag 19 maart 2002 14:52 schreef Grum het volgende:
je kan niet sorteren op '200' of wat dan ook .. je kan alleen maar sorteren op volgorde (alfabetisch/numeriek/etc)

daarnaast klopt je voorbeeld ook niet echt als jij 'gesorteerd' hebt op 200 ...

maar dit kan inderdaad met usort ..
sorry bedoelde 100


Maar wat ik dus bedoelde (tja vreemde zin maar) is om de waardes die in array[100][x][value] staan te sorteren. (dus de value die moet op naam gesorteerd te worden.

Verwijderd

Topicstarter
Op dinsdag 19 maart 2002 14:52 schreef Bpje het volgende:
Idd met usort()
Usort
PHP:
1
<?function cmp ($a, $b) {    if ($a == $b) return 0;    return ($a > $b) ? -1 : 1;}$a = array (3, 2, 5, 6, 1);usort ($a, "cmp");while (list ($key, $value) = each ($a)) {    echo "$key: $value\n";}?>

In de functie cmp kun je je eigen vergelijking maken.
>:)
ja voor 2d werkt dat maar een 3d.... |:(

  • Grum
  • Registratie: Juni 2001
  • Niet online
sorteer $array[100] op de name mbv usort, pak de keys eruit (die dus nu op volgorde staan) en lees adh van de keys de waardes (uit [100] en [200]) uit.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:20
Kan iemand die de bedoeling wel snapt 'm even aan mij uitleggen? Ik wil meedoen :)

  • Grum
  • Registratie: Juni 2001
  • Niet online
hij wil de array die in [100] staat sorteren op 'Name' (de keys dus sorteren) en dan wil hij met dezelfde volgorde van de keys [200] uitlezen.

dat is iig zover ik het snap :P

[edit]
ik snap niet waarom ie niet gewoon een andere array structuur neemt
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$array = array(
   1 => array(
        'naam' => 'Mies',
        'voer' => 'Kaas',
      ),
   2 => array(
        'naam' => 'Aap',
        'voer' => 'Pizza',
      ),
   4 => array(
        'naam' => 'Noot',
        'voer' => 'Friet',
      ),
   );

maar ok :P

  • tomato
  • Registratie: November 1999
  • Niet online
Heeft dit ook een praktisch nut? :X ;)

  • Bpje
  • Registratie: November 2000
  • Laatst online: 30-08 14:53
tja het werkt ook voor 2d, jou probleem is een 2d array en niet 3d dat eerst even.

2d = met een $array[][] 3d = $array[][][]

dit is een stukje source die ik gebruik voor een stats functie.
PHP:
1
<?//$lijst2 = resultaat van een query$i = 0;foreach($lijst2 as $key => $value) {    $lijst[$i]["naam"] = $value;    $lijst[$i]["datum"] = date("....    $lijst[$i]["aantal"] = $res..    $lijst[$i]["max"] = $res...    $i++;}function cmp ($a, $b){    if ($a["aantal"] < $b["aantal"])    {        return 1;    }    else    {         return 0;    }}$lijst3 = usort($lijst, "cmp");?>

  • Grum
  • Registratie: Juni 2001
  • Niet online
wat hij wil kan niet met 1 rag door een usort heen hoor :)

Verwijderd

Of je maakt meerdere usort-compare functies..
PHP:
1
<?$myarray = {hier je array}function cmp1($a,$b){    $a = usort($a,"cmpa");    $b = usort($b,"cmpb");}function cmpa($a,$b){ // etc}usort($myarray,"cmp1");?>

edit:
geen idee of het werkt hoor, waarschijnlijk niet :)


wil je je sorteervolgorde kunnen bepalen kun je dat met globals doen die je dan in je cmpa() en cmpb() gebruikt..

Programmeurs moeten creatief zijn met technieken.
De techniek ken je nu, dus de oplossing moet je nu ook kunnen vinden.

  • Grum
  • Registratie: Juni 2001
  • Niet online
en global is per definitie ranzig .. dus dat gaan we niet gebruiken :+ :D

  • Bpje
  • Registratie: November 2000
  • Laatst online: 30-08 14:53
sorry zag het verkeerd wel 3d.

Verwijderd

Topicstarter
Op dinsdag 19 maart 2002 15:14 schreef Grum het volgende:
hij wil de array die in [100] staat sorteren op 'Name' (de keys dus sorteren) en dan wil hij met dezelfde volgorde van de keys [200] uitlezen.

dat is iig zover ik het snap :P

[edit]
ik snap niet waarom ie niet gewoon een andere array structuur neemt
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$array = array(
   1 => array(
        'naam' => 'Mies',
        'voer' => 'Kaas',
      ),
   2 => array(
        'naam' => 'Aap',
        'voer' => 'Pizza',
      ),
   4 => array(
        'naam' => 'Noot',
        'voer' => 'Friet',
      ),
   );

maar ok :P
gaat niet, ik heb deze waardes maar als voorbeeld gepakt, in werkelijkheid ziet het er een stuk ingewikkelder uit.

Het ligt ook aan hoe ik de waardes in de array stop.

de '100' en '200' MOETEN hun waarde behouden anders weet ik niet hoe ze in de tabel moeten komen te staan.

Heb mijn eerste post ff iets aangepast om het misschien duidelijker te maken.

Verwijderd

Op dinsdag 19 maart 2002 15:23 schreef Grum het volgende:
en global is per definitie ranzig .. dus dat gaan we niet gebruiken :+ :D
Ja laten we een Sort object gaan maken en dan
$sort->setSortMethodForFirstChildArray("alfabethic");

snel is soms praktischer dan mooi...

  • Grum
  • Registratie: Juni 2001
  • Niet online
mijn methode is voor zijn array het effectiefste hoor :)

[contest-mode]
wou je benchen ? >:)
[/contest-mode]

Verwijderd

Op dinsdag 19 maart 2002 15:27 schreef Grum het volgende:
mijn methode is voor zijn array het effectiefste hoor :)

[contest-mode]
wou je benchen ? >:)
[/contest-mode]
Geen tijd, heb een klus en een tentamen :)

En je hebt trouwens gelijk dat z'n arraystructuur beter kan..

Verwijderd

Topicstarter
Op dinsdag 19 maart 2002 15:30 schreef fladder het volgende:

[..]

Geen tijd, heb een klus en een tentamen :)

En je hebt trouwens gelijk dat z'n arraystructuur beter kan..
ik zou niet weten hoe ik het anders moet uitleggen.

Kan hier de hele array wel ff posten >:)

  • Grum
  • Registratie: Juni 2001
  • Niet online
ben je blind of lees je gewoon niet ?

Der staan nu wel geteld 3 oplossingen in deze thread.

Verwijderd

Topicstarter
Op dinsdag 19 maart 2002 15:32 schreef Grum het volgende:
ben je blind of lees je gewoon niet ?

Der staan nu wel geteld 3 oplossingen in deze thread.
voor 2d arrays

  • Grum
  • Registratie: Juni 2001
  • Niet online
Je bent dus blind |:(
  • Grum: 15:12
    sorteer $array[100] op de name mbv usort, pak de keys eruit (die dus nu op volgorde staan) en lees adh van de keys de waardes (uit [100] en [200]) uit.
  • Grum: 15:21
    ik snap niet waarom ie niet gewoon een andere array structuur neemt
  • fladder: 15:22
    Of je maakt meerdere usort-compare functies..
en nu graag een slotje

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

lijkt me duidelijk
als je er niet uitkomt mag je met een gerichte vraag trugkomen :)

Doet iets met Cloud (MS/IBM)

Pagina: 1

Dit topic is gesloten.