[PHP] Multi-dimensionale assotive array sorteren

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • hoi1234
  • Registratie: Augustus 2012
  • Laatst online: 28-10-2024
Ik zeg het er maar meteen bij, dit is een oefening die ik vanuit mijn opleiding heb gekregen, maar ik kom er dus niet helemaal uit.

Mijn vraag

Mijn vraag: hoe kan ik de lijsten sorteren, zodat ik de gewenste output krijg, zodat je een rij met Voetbalclubs, een rij met websites enz. krijgt. (zie bijlage onderaan pagina, voor visuele uitleg en de gehele opdracht) Ik weet dat PHP functies heeft om de volgorde van een array te veranderen, maar wat ik ook probeer het lukt niet. Misschien kan iemand mij een hint geven? (moet het natuurlijk wel zoveel mogelijk zelf oplossen, anders leer ik er niks van) Moet ik bijvoorbeeld wel de array sorteren of wil ik eigenlijk iets anders doen?

Relevante software en hardware die ik gebruik
Laatste versie van Chrome
PHP STORM (voorlaatste versie)

Wat ik al gevonden of geprobeerd heb
Ik heb al gegoogled op mijn vraag, maar daarmee is mijn vraag niet echt beantwoordt.

PHP:
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
    $favourites = [

        [
            'footballclub' => 'Feyenoord',
            'website' => 'css-tricks.com',
            'vegetables' => 'asperges',
            'fruit' => 'aardbeien'
        ],

        [
            'footballclub' => 'Go Ahead Eagles',
            'website' => 'www.fronteers.nl',
            'vegetables' => 'kersen',
            'fruit' => 'peren'
        ],

        [
            'footballclub' => 'NEC',
            'website' => 'www.han.nl',
            'vegetables' => 'broccoli',
            'fruit' => 'perziken',

        ],

        [
            'footballclub' => 'PEC Zwolle',
            'website' => 'www.w3schools.com',
            'vegetables' => 'witlof',
            'fruit' => 'pruimen'
        ],

        [
            'footballclub' => 'vitesse',
            'website' => 'www.youtube.com',
            'fruit' => 'rode bessen'
        ]
    ];

Dit is de array waar ik overheen moet loopen met het volgende script: (zover ik het weet is de array goed, tenminste dat zei de docent, toen ik hem eerder hulp vroeg bij een ander probleem.)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
foreach($favourites as $favourite) {
        $iterator= 0;

        echo "<div> <ul>";
        foreach ($favourite as $key => $value) {
            echo "<li>$value</li> <br>";
            $iterator++;
            if(count($favourite) == $iterator) {
                echo "</ul></div>";
            }
        }
    }


Afbeeldingslocatie: http://i65.tinypic.com/2465sas.png

Alle reacties


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 07-10 19:27

Matis

Rubber Rocket

Is het niet eenvoudiger om eerst de $favourites te "kantelen", zodat je vier arrays krijgt. Eentje met alle clubs, eentje met de websites, groentes en fruit?

Die arrays kun je dan desgewenst sorteren.

Klopt het dat de laatste entry in de array geen 'vegetables' key heeft?

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • hoi1234
  • Registratie: Augustus 2012
  • Laatst online: 28-10-2024
Matis schreef op vrijdag 8 december 2017 @ 18:58:
Is het niet eenvoudiger om eerst de $favourites te "kantelen", zodat je vier arrays krijgt. Eentje met alle clubs, eentje met de websites, groentes en fruit?

Die arrays kun je dan desgewenst sorteren.

Klopt het dat de laatste entry in de array geen 'vegetables' key heeft?
Ik neem aan dat je het volgende bedoelt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
    $favouriteClub = ['Vitesse', 'NEC', 'PEC Zwolle', 'Feyenoord', 'Go Ahead Eagles'];

    $favouriteWebsites = [
        'w3schools' => 'https://www.w3schools.com',
        'Hogeschool van Arnhem en Nijmegen' => 'https://www.han.nl',
        'Youtube' => 'https://www.youtube.com',
        'CSS tricks' => 'https://www.css-tricks.com',
        'Fronteers' => 'https://www.fronteers.nl'
];

    $vegatables = ['asperges', 'aubergines','broccoli', 'witlof'];

    $fruits = ['aardbeien', 'kersen', 'peren', 'perziken', 'pruimen', 'rode bessen'];


Zo, ja dit is niet de bedoeling van de opdracht. Dit heb je al gedaan in opdracht 1 & opdracht 2 en nu is het juist de bedoeling om een array in een array te maken en die tweede array assositive te maken (dus zoals ik het doe)

Als je dit niet bedoelt, kun je dan de engelse benaming geven, zodat ik in ieder geval kan googlen wat je bedoelt? (vind met deze term weinig)

Acties:
  • 0 Henk 'm!

  • Just smile
  • Registratie: November 2005
  • Laatst online: 23:43
Ik denk dat hij dit bedoeld:

PHP:
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
  <?php 
$favourites = [
    'footballclubs' =>
    [
        'Feyenoord',
        'Go Ahead Eagles',
        'NEC',
        'PEC Zwolle',
        'Vitesse'
    ],
    'websites' =>
    [
        'css-tricks.com',
        'www.fronteers.nl',
        'www.han.nl',
        'www.w3schools.com',
        'www.youtube.com'
    ],
    'vegetables' =>
    [
        'asperges',
        'kersen',
        'broccoli',
        'witlof'
    ],
    'fruits' =>
    [
        'aardbeien',
        'peren',
        'perziken',
        'pruimen',
        'rode bessen'
    ]
];

array_multisort($favourites, SORT_ASC);

echo '<pre>';
print_r($favourites);
echo '</pre>';


Zie de output: http://sandbox.onlinephpf...1c08803d1cde705311b27f059

Uiteraard nog niet af. Maar ik denk dat je daar wel verder mee kan stoeien!

[ Voor 5% gewijzigd door Just smile op 08-12-2017 20:07 ]


Acties:
  • 0 Henk 'm!

  • hoi1234
  • Registratie: Augustus 2012
  • Laatst online: 28-10-2024
Just smile schreef op vrijdag 8 december 2017 @ 20:06:
Ik denk dat hij dit bedoeld:

PHP:
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
  <?php 
$favourites = [
    'footballclubs' =>
    [
        'Feyenoord',
        'Go Ahead Eagles',
        'NEC',
        'PEC Zwolle',
        'Vitesse'
    ],
    'websites' =>
    [
        'css-tricks.com',
        'www.fronteers.nl',
        'www.han.nl',
        'www.w3schools.com',
        'www.youtube.com'
    ],
    'vegetables' =>
    [
        'asperges',
        'kersen',
        'broccoli',
        'witlof'
    ],
    'fruits' =>
    [
        'aardbeien',
        'peren',
        'perziken',
        'pruimen',
        'rode bessen'
    ]
];

array_multisort($favourites, SORT_ASC);

echo '<pre>';
print_r($favourites);
echo '</pre>';


Zie de output: http://sandbox.onlinephpf...1c08803d1cde705311b27f059

Uiteraard nog niet af. Maar ik denk dat je daar wel verder mee kan stoeien!
Dankjewel! Hiermee, moet het inderdaad wel lukken (denk ik). Ik ga morgen of zo hier eens mee stoeien, moet eerst nog ander huiswerk maken, anders ga ik achter lopen.

Nu ik het bedenk is dit waarschijnlijk hoe je de array moet opzetten.

Acties:
  • 0 Henk 'm!

  • DirkZzZ
  • Registratie: September 2007
  • Laatst online: 04-09 10:02
Als de array zoals in je deze in je OP hebt geschreven zo moet blijven dan kan het met een combinatie van de volgende functies;

http://php.net/manual/en/function.array-map.php
http://php.net/manual/en/function.array-column.php
http://php.net/manual/en/function.array-keys.php
http://php.net/manual/en/function.call-user-func-array.php
http://php.net/manual/en/function.array-merge.php
http://php.net/manual/en/function.array-multisort.php

:P Maakt het wel een stuk leuker, heb je het hele hoofdstuk arrays meteen gehad.

[ Voor 6% gewijzigd door DirkZzZ op 08-12-2017 20:59 ]


Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 06:10

Reinier

\o/

assotive?
assositive?

Met de correcte termen krijg je meer zoekresultaten ;)

Acties:
  • 0 Henk 'm!

  • hoi1234
  • Registratie: Augustus 2012
  • Laatst online: 28-10-2024
Ga ik ook zeker naar kijken. Maar volgens mij is wat @Matis bedoelt ook al goed (hoe meer ik er over nadenk, hoe zekerder ik er van wordt dat dat de bedoeling is). Ook al heb ik het nu misschien niet nodig, het is altijd handig als je weet dat deze functies in PHP beschikbaar zijn.
Reinier schreef op vrijdag 8 december 2017 @ 20:58:
assotive?
assositive?

Met de correcte termen krijg je meer zoekresultaten ;)
Dat is zeker waar. :) Vaak verbetert google me wel als ik iets fout type.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 07-10 19:27

Matis

Rubber Rocket

Jups :)

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • hoi1234
  • Registratie: Augustus 2012
  • Laatst online: 28-10-2024
hoi1234 schreef op vrijdag 8 december 2017 @ 20:50:
[...]

Dankjewel! Hiermee, moet het inderdaad wel lukken (denk ik). Ik ga morgen of zo hier eens mee stoeien, moet eerst nog ander huiswerk maken, anders ga ik achter lopen.

Nu ik het bedenk is dit waarschijnlijk hoe je de array moet opzetten.
Ben vandaag pas eraan toegekomen om de opdracht weer op te pakken.

Ben nu in ieder geval zo ver dat ik alles op de juiste volgorde op het scherm krijg. Alleen hoe krijg ik de naam van de lijst boven de lijst? Ik neem aan dat ik dan de key van de array moet hebben. Is dit juist, zo, ja, hoe krijg ik de key?

Ik snap dat je in een foreach loop $favourites as key => $value kunt doen, maar wil de $key in de eerste foreachloop hebben en die kent geen $key variabele.
Pagina: 1