[php] Array netjes sorteren

Pagina: 1
Acties:

Onderwerpen


  • schizofreen
  • Registratie: Juni 2000
  • Laatst online: 19-09 13:22
Ik probeer een (geneste) arrays met bestellingen en producten (in orderitems) te sorteren door gelijke producten samen te gooien en en daar een 'aantal' aan toe te voegen.
een array ziet er (versimpelt) bijvoorbeeld zo uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Array
(
    [0] => Array
        (
            [orderId] => 57707933
            [orderitems] => Array
                                    (
                                           [0] => Array
                                               (
                                                   [model] => TWK
                                                   [productId] => 46295640
                                               }
                                           [1] => Array
                                               (
                                                   [model] => TWK
                                                   [productId] => 46295640
                                               }
               }
}


Omdat beide orderitems, dezelfde productId hebben zou ik dit graag willen omvormen in een:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array
(
    [0] => Array
        (
            [orderId] => 57707933
            [orderitems] => Array
                                    (
                                           [0] => Array
                                               (
                                                   [model] => TWK
                                                   [productId] => 46295640
                                                   [aantal] => 2
                                               }
                                    }
}


Nu heb ik geprobeert om met een foreach de orderitems steeds door te lopen en de aantallen toe te wijzen bij gelijken. Maar dat geheel was nogal omslachtig en resulteerde dat elk orderitem nu een aantal meekregen, maar er nog steeds gelijken bleven bestaan.
Wie weer er een effectievere methode om dit op te lossen?

laat ik nou toevallig toch een stift bij me hebben! - specs


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

NMe

Quia Ego Sic Dico.

Je hebt nu $array[0][orderitems][0] en daarin staat al je info. Het kan veel makkelijker als je voor die laatste ook een key gebruikt, namelijk het productid (dat is immers uniek in je array, en kan dus als key dienen). Je kan dan simpelweg vantevoren $arr[0][orderitems][$productid][aantal] op 1 zetten, en elke keer als je weer een nieuwe occurrance van dat id tegenkomt, dan doe je gewoon 1 optellen bij dat aantal.

'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.


  • schizofreen
  • Registratie: Juni 2000
  • Laatst online: 19-09 13:22
-NMe- schreef op donderdag 22 september 2005 @ 15:25:
Je hebt nu $array[0][orderitems][0] en daarin staat al je info. Het kan veel makkelijker als je voor die laatste ook een key gebruikt, namelijk het productid (dat is immers uniek in je array, en kan dus als key dienen). Je kan dan simpelweg vantevoren $arr[0][orderitems][$productid][aantal] op 1 zetten, en elke keer als je weer een nieuwe occurrance van dat id tegenkomt, dan doe je gewoon 1 optellen bij dat aantal.
dat is idd een vrij mooi idee, maar er zitten nogal wat afhankelijkheden in het systeem waarbij andere klassen ook deze functie gebruiken. Het toevoegen van een extra ['aantal'] is daarvoor geen probleem, maar dus wel als ik key's e.d. overhoop ga gooien.

laat ik nou toevallig toch een stift bij me hebben! - specs


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

NMe

Quia Ego Sic Dico.

Dan zul je een tijdelijk array moeten opbouwen door je bestaande array te doorlopen, en daarbij steeds opnieuw je nieuwe array te doorlopen met een foreach om te kijken of er al een key is waarvoor dat productid bestaat.

'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.