[PHP] Multidimensionale array mergen met zichzelf

Pagina: 1
Acties:

Onderwerpen


  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 19-09 01:03
Stel ik heb deze array:

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
Array
(
  [0] => Array
  (
    [0] => 2007
    [1] => 11
    [2] => Klant1
    [3] => Product1
    [5] => 645
  )
  [1] => Array
  (
    [0] => 2007
    [1] => 12
    [2] => Klant1
    [3] => Product1
    [5] => 65
  )
  [2] => Array
  (
    [0] => 2007
    [1] => 11
    [2] => Klant1
    [3] => Product1
    [5] => 635
  )
  [3] => Array
  (
    [0] => 2007
    [1] => 12
    [2] => Klant1
    [3] => Product2
    [5] => 615
  )
  [3] => Array
  (
    [0] => 2007
    [1] => 5
    [2] => Klant2
    [3] => Product1
    [5] => 644
  )
)


Dan wil ik detecten dat array[0] en array[2] dezelfde klant, jaar, datum en product bevatten.
Het aantal wil ik dan bij elkaar optellen en op deze uitkomst uitkomen:

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
Array
(
  [0] => Array
  (
    [0] => 2007
    [1] => 11
    [2] => Klant1
    [3] => Product1
    [5] => 1380
  )
  [1] => Array
  (
    [0] => 2007
    [1] => 12
    [2] => Klant1
    [3] => Product1
    [5] => 65
  )
  [3] => Array
  (
    [0] => 2007
    [1] => 12
    [2] => Klant1
    [3] => Product2
    [5] => 615
  )
  [3] => Array
  (
    [0] => 2007
    [1] => 5
    [2] => Klant2
    [3] => Product1
    [5] => 644
  )
)


dus dattie array[0] en [2] bij elkaar optelt, en array[2] unset :)
Dit kan meerdere keren voorkomen binnen de array. Deze array is in het echt ongeveer 80 subarrays groot.

Wat is de beste manier waarop ik dit kan aanpakken?
Het lijkt er op dat ik erg vaak moet gaan loopen maar ik krijg de vinger er niet achter op welke manier ik dit moet gaan doen.

Ik heb uiteraard even gekeken op PHP.net, zowel in de voorbeelden en in de functies, heb mijn fantasie gebruikt om wat te bedenken maar ik weet even niks :X

There is no replacement for displacement!


  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 18-09 23:26

Tjark

DON'T PANIC

een loop n maken over de array en daarbinnen een loop m die begint bij n+1 tot einde waarbij je controlleert of klant, jaar, datum en product hetzelfde zijn. Indien zo: aantal optellen bij de n loop index, een array_splice op m uitvoeren zodat je die verwijdert.

[ Voor 7% gewijzigd door Tjark op 20-12-2007 12:42 ]

*insert signature here


  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Kan je niet gewoon je klantid als key gebruiken. Weet je van te voren al of je een klant al in de lijst hebt staan.

disjfa - disj·fa (meneer)
disjfa.nl


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
In een enkele loop een nieuwe array opbouwen met klant.jaar.datum.product als key. Vervolgens kan je afhankelijk van isset() indien nodig het aantal ophogen of een nieuw element toevoegen.

{signature}


  • ATS
  • Registratie: September 2001
  • Laatst online: 18-09 15:14

ATS

Een verbeterde versie van Tjark Verhoevens oplossing is eerst de array sorteren op klant, dan hoeft je binnenste loop alleen maar te kijken naar de direct volgende elementen van je array en hoef je niet de hele array steeds door. Maargoed, de opmerkingen van disjfa en Voutloos zijn natuurlijk ook goede suggesties.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant