[PHP] Mogelijke set combinaties

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dennisderoo
  • Registratie: Februari 2004
  • Laatst online: 17-02-2021
Ik ben vastgelopen en hoop dat jullie mij verder kunnen helpen..

Onderstaande Array zijn sets van producten. Dus set nr. 4 (key) bestaat uit 2 producten: 77611852336 en 776011055413

Nu wil ik alle mogelijke combinaties maken met deze sets maar het product mag dus maar 1x gebruikt worden.

Als uitkomst zou ik, in dit geval, alleen set 4 met 11 als combinatie moeten hebben. Hoe pak ik dit aan?

Array 
( 
    [4] => Array 
        ( 
            [0] => 77611852336 
            [1] => 776011055413 
        ) 

    [9] => Array 
        ( 
            [0] => 77611852336 
            [1] => 77911962521 
            [2] => 776011055413 
        ) 

    [10] => Array 
        ( 
            [0] => 77911962521 
            [1] => 776011055413 
        ) 

    [11] => Array 
        ( 
            [0] => 77911962521 
            [1] => 779121044521 
        ) 

)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Allereerst is me niet precies duidelijk wat je wil en ten tweede mis ik wat je zelf al hebt geprobeerd, gezocht, gevonden. Misschien zoek je permutaties?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Dennisderoo
  • Registratie: Februari 2004
  • Laatst online: 17-02-2021
Permutaties is inderdaad het woord dat ik zocht. Het is me uiteindelijk gelukt, dit is wat ik wilde:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
foreach($combies_ids AS $combi_id => $product_array) { 
    foreach($combies_ids AS $combi_id2 => $product_array2) { 
        $count=0; 
        $aantal_producten_inset=count($product_array2); 
        foreach($product_array2 AS $product_id) { 
            if(!in_array($product_id,$product_array)) { 
                # komt niet voor dus tellen er 1 bij op 
                $count++; 
            } 
        } 
        # alle nummers uit de array komen niet voor dus combi opslaan 
        if($count==$aantal_producten_inset) { 
            $newcombi[][$combi_id]=$combi_id2; 
        } 
    } 
}


Resultaat:

Array 
( 
    [0] => Array 
        ( 
            [4] => 11 
        ) 

    [1] => Array 
        ( 
            [11] => 4 
        ) 

)


4 kan ik met 11 combineren en andersom.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Als het arrays zijn die opgebouwd worden vanuit een database, is het dan misschien niet verstandiger je database en queries te optimaliseren? Mogelijke keywoord hiervoor is dan weer SQL normalisatie.

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Misschien moet je je even inlezen over UBB-codes. Tags als [php], [code] en [pre] zorgen voor een stuk leesbare post :)

Acties:
  • 0 Henk 'm!

  • Dennisderoo
  • Registratie: Februari 2004
  • Laatst online: 17-02-2021
Sorry, UBB was ik inderdaad even vergeten! (is aangepast)

Maar wat ik wil is dat mijn winkelwagen automatisch product-sets herkend en daar eventueel korting op kan geven.

De array in mijn begin post zijn alle sets die gemaakt kunnen worden met de producten die in de winkelwagen staan. Mijn volgende stap is om uit te rekenen welke set combinaties het voordeligst uitkomt qua korting.

Wat ik daarvoor nodig heb zijn sets die gecombineerd kunnen worden, dat is waar ik nu op vast zat.

Je hebt bijvoorbeeld product A,B,C,D in je winkelwagen. In de database staan bijvoorbeeld de sets A+B (-100 euro), B+C (-200 euro). Het voordeligst is dus set B+C want deze geeft 200 euro korting.
Dit is echter nog een simpel voorbeeld. Je kunt ook sets combineren.... Stel dat ik set A+D (-100 euro), B+C (-100), A+B (-150), C+D (-150). Meeste korting krijg ik als ik set A+B en C+D combineer.....

Ik geloof niet dat dit in SQL gaat lukken??
Pagina: 1