[PHP] Grote Array Sorteren*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
Ik haal met behulp van mysql data uit een db (mysql_fetch_row), het betreft informatie over een bestandssysteem (als je het zo kan noemen) .
id | bestand_locatie | extra_map < dat soort dingen.

Gebruikers kunnen dus mappen aanmaken, dus terwijl ik die data uit de db haal word het via een while loop direct apart in een array gestopt

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
        $bestand_lijst_array = array() ;
        $x = 0;
        while ( $output2 = $DB_LINK_CLASS -> db_fetch_row ($output) ) {
            if ( $output2['5'] == '/') {
                $bestand_lijst_array['geen_map']["$x"] = $output2 ;
            }
            else {
                //nummer 5 is de positie van gebruiker_extra_map in db
                $tmp = $output2['5'];
                $bestand_lijst_array['wel_map'][$tmp]["$x"] = $output2 ;
            }
            $x++ ;
        }


dit levert de output :

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Array
(
    [geen_map] => Array
        (
            [0] => Array
                (
                    [0] => 3
                    [1] => 7
                    [2] => Domein namen.txt
                    [3] => tupload/7//
                    [4] => 7/
                    [5] => /
                    [6] => 1
                )

        )

    [wel_map] => Array
        (
            [cool/] => Array
                (
                    [1] => Array
                        (
                            [0] => 4
                            [1] => 7
                            [2] => Domein namen.txt
                            [3] => tupload/7/cool/
                            [4] => 7/
                            [5] => cool/
                            [6] => 1
                        )

                    [3] => Array
                        (
                            [0] => 6
                            [1] => 7
                            [2] => 1Domein namen.txt
                            [3] => tupload/7/cool/
                            [4] => 7/
                            [5] => cool/
                            [6] => 1
                        )

                )

            [testmap/] => Array
                (
                    [2] => Array
                        (
                            [0] => 5
                            [1] => 7
                            [2] => Domein namen.txt
                            [3] => tupload/7/testmap/
                            [4] => 7/
                            [5] => testmap/
                            [6] => 1
                        )

                )

        )

)


Zoals je zit is de array een Mix van Nummers en Keys, ik los dit op door de functie array_keys()
PHP:
1
2
3
4
        $bestand_array_keys_L1 = array_keys($bestand_lijst_array) ;
            // Output :
            // -- ['0'] = Geen Map
            // -- ['1'] = Wel Map

Hierdoor kan ik later in een loop snel de data uit de oorspronkelijke array halen zonder de key ervan te weten wat bij de 2e array level zijn de keys de map namen. Ik doe een gelijksoortige actie zoals hierboven om het om te kunnen zetten naar Nummers.

uiteindelijk kan ik het zo aanroepen : (als vb)
PHP:
1
echo $bestand_lijst_array[$bestand_array_keys_L1[1]][$bestand_array_keys_L2_welmap[1]][2][0] ;



Nu komt mijn echte probleem, zoals je ziet bij het mapje COOL , zijn de array die volgen niet op directe nummer gesorteert zie ook [1] en [3], ik wil dus weten hoe ik die [1] en [3] op volgorde kan zetten denk aan bijvoorbeeld [0] en [1] zodat ik het in een Loop kan gebruiken.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

Verwijderd

foreach

En je manier van scripten is niet erg handig te noemen. Haal gewoon een associatieve array op, met bijvoorbeeld mysql_fetch_assoc. Er is niet vlug een reden te bedenken om uberhaupt ooit mysql_fetch_row of mysql_fetch_array te gebruiken.

[ Voor 3% gewijzigd door Verwijderd op 02-07-2005 00:25 ]


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
Verwijderd schreef op zaterdag 02 juli 2005 @ 00:25:
foreach

En je manier van scripten is niet erg handig te noemen. Haal gewoon een associatieve array op, met bijvoorbeeld mysql_fetch_assoc. Er is niet vlug een reden te bedenken om uberhaupt ooit mysql_fetch_row of mysql_fetch_array te gebruiken.
ja dat lukte me dus niet, dus ik zie niet hoe ik foreach in mijn situatie kan gebruiken.
mysql_fetch_assoc , ja dat zou beter geweest zijn. Aangezien ik nu alles loop te oncijferen en erom heen aan het scripten ben.

Maar ik zou toch graag een antwoord op mijn vraag willen hebben.

[ Voor 19% gewijzigd door aex351 op 02-07-2005 00:37 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

aex351 schreef op zaterdag 02 juli 2005 @ 00:35:
ja dat lukte me dus niet, dus ik zie niet hoe ik foreach in mijn situatie kan gebruiken.
mysql_fetch_assoc , ja dat zou beter geweest zijn. Aangezien ik nu alles loop te oncijferen en erom heen aan het scripten ben.
foreach werkt ook gewoon voor het soort array waar jij mee werkt hoor? :?
Maar ik zou toch graag een antwoord op mijn vraag willen hebben.
Met assocs gaan werken is een antwoord op je vraag, want dat zou je een groot deel van dit probleem besparen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
Eerlijk gezegt zie ik er weinig verschil in. Het gaat er gewoon om dat ik
- de data kan onder scheiden in WEL/GEEN map
--> WEL MAP --- de verschillende mappen kan onderscheiden.

en later die array kan gebruiken voor opbouw met html. Het enige probleem dat ik nu heb is dat de nummers in niet gelijk oplopen in WEL MAP -> map1 -> bestand 1 is [1] terwijl in map map 2 bestand 1 [3] is. en [2] zich bevind in map 1 bijvind. het staat dus gewoon niet op volgorde

Hoe kan ik dit dat met fetch_assoc oplossen?

[ Voor 13% gewijzigd door aex351 op 02-07-2005 01:02 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

Verwijderd

Dat mysql_fetch_assoc kan ervoor zorgen dat je nuttige namen hebt voor de array keys, in plaats van 0 t/m 6.Ik heb geen flauw idee wat die getalletjes betekenen. Dat had ik wel als je array er zo uitzag:

code:
1
2
3
4
5
6
7
8
[0] => Array
     (
        [file_id] => 3
        [user_id] => 7
        [file_name] => Domein namen.txt
        [dir] => tupload/7//
     )
)

En jij zelf ook, als je over een paar weken eens je code moet aanpassen.

Wat betreft die foreach:
PHP:
1
2
3
4
5
6
7
8
9
10
for ( $key = 0; $key < sizeof ( $array ); $key++ ) {
   $value = $array [ $key ];
   printf ( 'key: %u, value: %s', $key, $value );
}

// versus 

foreach ( $array as $key => $value ) {
   printf ( 'key: %u, value: %s', $key, $value );
}

[ Voor 5% gewijzigd door Verwijderd op 02-07-2005 01:05 ]


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
Maar ik wil die waardes niet direct echo'en, ik wil ze eerst netjes in arrays stoppen omdat ik ze daarmee later op alfabetische volgorde kan sorten. en ook een menu structuur kan maken.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

Verwijderd

Dan doe je dat toch?

Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
Ja was mijn vraag niet hoe ik dat moet doen!

edit:na alle functies te hebben geprobeert kwam het er op neer dat ik gewoon sort() moest gebruiken. :/

[ Voor 32% gewijzigd door aex351 op 02-07-2005 01:32 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

Verwijderd

Je vroeg min of meer hoe je een array met niet opeenvolgende keys kon omzetten naar een array met wèl opeenvolgende keys zodat je deze met een loop kon aflopen.

Ik laat zien hoe je met een loopje een array langs kunt lopen, en jij gaat lopen zeuren dat de code niet exact doet wat jij wilt dat het zou doen. Dat is verder jouw probleem. Als je dit al niet kunt en/of wilt proberen aan te passen, kun je misschien beter een andere hobby zoeken.

Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
Verwijderd schreef op zaterdag 02 juli 2005 @ 01:35:
Je vroeg min of meer hoe je een array met niet opeenvolgende keys kon omzetten naar een array met wèl opeenvolgende keys zodat je deze met een loop kon aflopen.

Ik laat zien hoe je met een loopje een array langs kunt lopen, en jij gaat lopen zeuren dat de code niet exact doet wat jij wilt dat het zou doen. Dat is verder jouw probleem. Als je dit al niet kunt en/of wilt proberen aan te passen, kun je misschien beter een andere hobby zoeken.
Helemaal niet, je komt aanzetten dat ik mysql_fetch_assoc moet gaan gebruiken in combinatie met foreach. Later vertel je erbij dat mysql_fetch_assoc eigenlijk helemaal niet zo belangrijk was. En dan enkele replys verder geef je als antwoord op me vraag, dan doe je dat toch. Ja als ik dat gewoon ff doe dan had ik geen thread hier gepost he!

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

Verwijderd

Waar lees jij dat ik mysql_fetch_assoc niet belangrijk vind? Ik maakte die opmerking omdat je code niet duidelijk is. En je maakt niet echt de indruk dat je de taal of überhaupt het programmeren beheerst, dus je kunt maar beter iets met mijn opmerkingen proberen te doen.

Als je dat niet van plan was, dan vraag ik me af wat je hier wèl kwam doen.

Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
Verwijderd schreef op zaterdag 02 juli 2005 @ 01:45:
Waar lees jij dat ik mysql_fetch_assoc niet belangrijk vind? Ik maakte die opmerking omdat je code niet duidelijk is. En je maakt niet echt de indruk dat je de taal of überhaupt het programmeren beheerst, dus je kunt maar beter iets met mijn opmerkingen proberen te doen.

Als je dat niet van plan was, dan vraag ik me af wat je hier wèl kwam doen.
Dat moet jij nodig zeggen met "Dan doe je dat toch" . Als jij zo goed in php was dan zou je direct als antwoord kunnen meegeven, gebruik sort(). niet verbouw je complete code.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik stel voor dat we het even allemaal wat rustiger aan gaan doen hier. :)

aex351, zoals Cheatah al zegt is het probleem wat je hebt ofwel eenvoudig op te lossen, ofwel je legt het niet goed genoeg uit. Vertel eens wat je precies niet begrijpt en hoe ver je dan wel komt het het advies van Cheatah.
aex351 schreef op zaterdag 02 juli 2005 @ 01:49:
Dat moet jij nodig zeggen met "Dan doe je dat toch" . Als jij zo goed in php was dan zou je direct als antwoord kunnen meegeven, gebruik sort(). niet verbouw je complete code.
Dus iemand die niet direct het antwoord geeft in het formaat dat jij wenst, zodat je het kan copy/pasten in je code, dan is hij niet goed genoeg in PHP? Sorry hoor, maar op GoT werken we gewoon niet met kant en klare oplossingen. We geven doorgaans net voldoende informatie aan je waarmee je er zelf uit moet kunnen komen. :)

[ Voor 51% gewijzigd door NMe op 02-07-2005 01:51 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
-NMe- schreef op zaterdag 02 juli 2005 @ 01:49:
Ik stel voor dat we het even allemaal wat rustiger aan gaan doen hier. :)

aex351, zoals Cheatah al zegt is het probleem wat je hebt ofwel eenvoudig op te lossen, ofwel je legt het niet goed genoeg uit. Vertel eens wat je precies niet begrijpt en hoe ver je dan wel komt het het advies van Cheatah.


[...]

Dus iemand die niet direct het antwoord geeft in het formaat dat jij wenst, zodat je het kan copy/pasten in je code, dan is hij niet goed genoeg in PHP? Sorry hoor, maar op GoT werken we gewoon niet met kant en klare oplossingen. We geven doorgaans net voldoende informatie aan je waarmee je er zelf uit moet kunnen komen. :)
dat was meer een reactie op
En je maakt niet echt de indruk dat je de taal of überhaupt het programmeren beheerst, dus je kunt maar beter iets met mijn opmerkingen proberen te doen
Iemand die doet alsof hij alles weet.
ik heb geloof ik ook nergens de indruk gewekt dat ik een kant en klare code eisde. aangezien ik gewoon met de vraag kwam, hoe ik die nummers op volgorde kon krijgen.

ps: advies van cheetah
|:(

[ Voor 11% gewijzigd door aex351 op 02-07-2005 01:57 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Nogmaals, ik stel voor dat deze discussie buiten het forum (of liever: niet) gevoerd wordt. Graag ontopic nu.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Je kunt altijd voor de gein een bubble sort-logaritme kunnen gebruiken.. als je wilt zou je dat zelfs in combinatie met bijvoorbeeld "foreach" kunnen gebruiken.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
Wat cheatah onder andere aankaart is dat je array nou niet echt zo is opgebouwd dat als iemand anders naar de output/code van dit stukje script kijkt er wat van kan begrijpen.

Zowieso is het verstandig om je array te hervormen naar de manier waarop cheatah het zegt zodat je zelf als je later naar je code kijkt of als iemand anders ermee aan de slag moet je meteen snapt wat alles doet!

Voor de rest kan het met assoc, foreach of sort of je moet even je eigen sorteer algoritme bouwen met een temporary array en matchen op eerste teken van de values die je wil sorteren.

Acties:
  • 0 Henk 'm!

Verwijderd

aex351 schreef op zaterdag 02 juli 2005 @ 01:31:
[...]

Ja was mijn vraag niet hoe ik dat moet doen!

edit:na alle functies te hebben geprobeert kwam het er op neer dat ik gewoon sort() moest gebruiken. :/
Kon nou niemand de beste jongeman vertellen dat hij de functie sort() zocht voordat hij dit zelf na lang zoeken heeft uitgevonden? Ik kan me voorstellen dat niet iedereen de manier waarop TS zichzelf verwoord helemaal kan accepteren, maar hoe moeilijk is het nou om iemand antwoord te geven op een relatief uiterst simpele vraag? Daarnaast begrijp ik dat TS ook wel iets beter had kunnen zoeken (vind ook ik namelijk) maar laten we het wel gezellig houden hier.. :Y)
Pagina: 1