2

Possible Duplicate:
PHP take all combinations

I'm thinking of making something in PHP that will show me all combinations of license plates. For example:

You have 3 boxes you can fill in max 2 values

Like

BOX1 BOX2 BOX3
75   PM   M5 
7S   PH   MS
Z5   PN   H5
ZS   RM   HS
25   RH   N5
2S   RN   NS

NOT BOX1+BOX1+BOX1
It needs to show me
ex. 75-PM-M5
ex. 75-PH-MS
ex. 75-PN-MS
ex. 75-PM-H5
ex. 75-PH-H5
ex. 75-PN-H5
So, BOX1+BOX2+BOX3

The PHP script needs to calculate all the combinations for BOX1+BOX2+BOX3
So BOX1 value1 and value2 are ONE value not two separate values. 
In BOX2 value1 and value2 are also ONE value not two separate values and so on.

If I want all combinations of 
BOX1'91' + BOX2'HF' + BOX3'PF'
BOX1'74' + BOX2'RT' + BOX3'YT'

It will calculate an amount of 2x2x2=8 combinations 

ex. 91-HF-PF
ex. 91-HF-YT
ex. 91-RT-PF
ex. 91-RT-YT
ex. 74-HF-PF
ex. 74-HF-YT
ex. 74-RT-PF
ex. 74-RT-YT

Example pincode

you need to enter 4 pincodes to use your apm card

PIN1+PIN2+PIN3+PIN4
1    1    1    1
2    2    2    2
3    3    3    3
4    4    4    4
5    5    5    5
6    6    6    6
7    7    7    7
8    8    8    8
9    9    9    9
0    0    0    0

So you have in total combination of 10x10x10x10=10.000 combinations and it has to show all combinations

if someone could help me out I would be thankful

Community
  • 1
  • 1
MOTIVECODEX
  • 2,624
  • 14
  • 43
  • 78
  • Check my Answer in this topic : http://stackoverflow.com/questions/9787051/php-take-all-combinations/9787438#9787438. It should work for you too. – Dr.Kameleon Apr 05 '12 at 13:28
  • This looks like what I need but it also shows cat cat cat. But that's not what i want. It needs to show only combinations of box1box2box3 not box1box1box1.. any ideas? – MOTIVECODEX Apr 06 '12 at 22:59
  • SO : No element can be repeated (e.g. NO A-A-B, C-C-C, etc) & A-B-C is considered different from A-C-B. Are my assumptions correct? – Dr.Kameleon Apr 06 '12 at 23:11
  • Please, have a look at my other answer and let me know if it works for you... (it should ;-)) – Dr.Kameleon Apr 06 '12 at 23:34

1 Answers1

5

Code :

<?php

function combinations($arr, $n)
{
    $res = array();

    foreach ($arr[$n] as $item)
    {
        if ($n==count($arr)-1)
            $res[]=$item;
        else
        {
            $combs = combinations($arr,$n+1);

            foreach ($combs as $comb)
            {
                $res[] = "$item $comb";
            }
        }
    }
    return $res;
}

// Your ARRAY (first array is like 'BOX1', etc - )
// you can put as many items in each 'BOX' as you like... 
// and as many 'boxes' as you like
$words = array(array('A','B'),array('C','D'), array('E','F'));

$combos = combinations($words,0);  // ALWAYS, call it with 0 as the last parameter
print_r($combos);

?>

Output :

Array
(
    [0] => A C E
    [1] => A C F
    [2] => A D E
    [3] => A D F
    [4] => B C E
    [5] => B C F
    [6] => B D E
    [7] => B D F
)

I think THIS is EXACTLY what you need... :-)

Dr.Kameleon
  • 22,532
  • 20
  • 115
  • 223
  • This works better and faster than 2 answers from here https://stackoverflow.com/questions/13525893/array-combinatorics-in-php – Vit Dec 26 '21 at 14:39