# Matrix combination

Go to solution Solved by Barand,

## Recommended Posts

COLUMNS

Rows    A      B         C

1          11     22       33

2         44     55       66

3         66     77       88

4         99    100    110

5         111    122    133

I have a matrix of 3 columns (A,B,C) by 5 rows (1-5).

I need loops to acquire all the possible combinations possible
The combination elements must cascade from the first row to the lower rows with ONLY one element from each row

Rules
a) Every set of combination has a max of 5 elements
a) All the combinations begins at the first row (A1 or B1 or C1) AND combines with lower elements in a belt like manner from the Top to the bottom row
c) In a set you cannot pick more than one element from the same row

Examples

right

A1,A2,A3,A4,A5
B1,A2,A3,A4,A5
C1,A2,A3,A4,A5
C1,A2,A3,A4,A5
B1,B2,A3,A4,A5

WRONG
C1,A2,B2,A4,A5 (A2 AND B2 have the same row number)
C1,A2,B2,A4,A5     (A2 & B2 have the same row number)
A3,B2,A3,B1,A5 (The first element in the set should start from the first row which is A1/B1/C1)
C5,A1,A2,A3,A4 ( the first element IN a set must be A1/B1/C1)

Homework?

##### Share on other sites

What code have you written so far, what did it do, and what did you expect it to do?

##### Share on other sites

Looks like your teacher is introducing you to arrays and loops.  This exercise wants you to create arrays of each set of values and then loop thru each array inside of the previous array.

10 minutes later:

I was right. It was easy.

##### Share on other sites

• Solution

Does this look right?

``` A1 A2 A3 A4 A5    A1 B2 A3 A4 A5    A1 C2 A3 A4 A5    B1 A2 A3 A4 A5    B1 B2 A3 A4 A5    B1 C2 A3 A4 A5    C1 A2 A3 A4 A5    C1 B2 A3 A4 A5    C1 C2 A3 A4 A5
A1 A2 A3 A4 B5    A1 B2 A3 A4 B5    A1 C2 A3 A4 B5    B1 A2 A3 A4 B5    B1 B2 A3 A4 B5    B1 C2 A3 A4 B5    C1 A2 A3 A4 B5    C1 B2 A3 A4 B5    C1 C2 A3 A4 B5
A1 A2 A3 A4 C5    A1 B2 A3 A4 C5    A1 C2 A3 A4 C5    B1 A2 A3 A4 C5    B1 B2 A3 A4 C5    B1 C2 A3 A4 C5    C1 A2 A3 A4 C5    C1 B2 A3 A4 C5    C1 C2 A3 A4 C5
A1 A2 A3 B4 A5    A1 B2 A3 B4 A5    A1 C2 A3 B4 A5    B1 A2 A3 B4 A5    B1 B2 A3 B4 A5    B1 C2 A3 B4 A5    C1 A2 A3 B4 A5    C1 B2 A3 B4 A5    C1 C2 A3 B4 A5
A1 A2 A3 B4 B5    A1 B2 A3 B4 B5    A1 C2 A3 B4 B5    B1 A2 A3 B4 B5    B1 B2 A3 B4 B5    B1 C2 A3 B4 B5    C1 A2 A3 B4 B5    C1 B2 A3 B4 B5    C1 C2 A3 B4 B5
A1 A2 A3 B4 C5    A1 B2 A3 B4 C5    A1 C2 A3 B4 C5    B1 A2 A3 B4 C5    B1 B2 A3 B4 C5    B1 C2 A3 B4 C5    C1 A2 A3 B4 C5    C1 B2 A3 B4 C5    C1 C2 A3 B4 C5
A1 A2 A3 C4 A5    A1 B2 A3 C4 A5    A1 C2 A3 C4 A5    B1 A2 A3 C4 A5    B1 B2 A3 C4 A5    B1 C2 A3 C4 A5    C1 A2 A3 C4 A5    C1 B2 A3 C4 A5    C1 C2 A3 C4 A5
A1 A2 A3 C4 B5    A1 B2 A3 C4 B5    A1 C2 A3 C4 B5    B1 A2 A3 C4 B5    B1 B2 A3 C4 B5    B1 C2 A3 C4 B5    C1 A2 A3 C4 B5    C1 B2 A3 C4 B5    C1 C2 A3 C4 B5
A1 A2 A3 C4 C5    A1 B2 A3 C4 C5    A1 C2 A3 C4 C5    B1 A2 A3 C4 C5    B1 B2 A3 C4 C5    B1 C2 A3 C4 C5    C1 A2 A3 C4 C5    C1 B2 A3 C4 C5    C1 C2 A3 C4 C5
A1 A2 B3 A4 A5    A1 B2 B3 A4 A5    A1 C2 B3 A4 A5    B1 A2 B3 A4 A5    B1 B2 B3 A4 A5    B1 C2 B3 A4 A5    C1 A2 B3 A4 A5    C1 B2 B3 A4 A5    C1 C2 B3 A4 A5
A1 A2 B3 A4 B5    A1 B2 B3 A4 B5    A1 C2 B3 A4 B5    B1 A2 B3 A4 B5    B1 B2 B3 A4 B5    B1 C2 B3 A4 B5    C1 A2 B3 A4 B5    C1 B2 B3 A4 B5    C1 C2 B3 A4 B5
A1 A2 B3 A4 C5    A1 B2 B3 A4 C5    A1 C2 B3 A4 C5    B1 A2 B3 A4 C5    B1 B2 B3 A4 C5    B1 C2 B3 A4 C5    C1 A2 B3 A4 C5    C1 B2 B3 A4 C5    C1 C2 B3 A4 C5
A1 A2 B3 B4 A5    A1 B2 B3 B4 A5    A1 C2 B3 B4 A5    B1 A2 B3 B4 A5    B1 B2 B3 B4 A5    B1 C2 B3 B4 A5    C1 A2 B3 B4 A5    C1 B2 B3 B4 A5    C1 C2 B3 B4 A5
A1 A2 B3 B4 B5    A1 B2 B3 B4 B5    A1 C2 B3 B4 B5    B1 A2 B3 B4 B5    B1 B2 B3 B4 B5    B1 C2 B3 B4 B5    C1 A2 B3 B4 B5    C1 B2 B3 B4 B5    C1 C2 B3 B4 B5
A1 A2 B3 B4 C5    A1 B2 B3 B4 C5    A1 C2 B3 B4 C5    B1 A2 B3 B4 C5    B1 B2 B3 B4 C5    B1 C2 B3 B4 C5    C1 A2 B3 B4 C5    C1 B2 B3 B4 C5    C1 C2 B3 B4 C5
A1 A2 B3 C4 A5    A1 B2 B3 C4 A5    A1 C2 B3 C4 A5    B1 A2 B3 C4 A5    B1 B2 B3 C4 A5    B1 C2 B3 C4 A5    C1 A2 B3 C4 A5    C1 B2 B3 C4 A5    C1 C2 B3 C4 A5
A1 A2 B3 C4 B5    A1 B2 B3 C4 B5    A1 C2 B3 C4 B5    B1 A2 B3 C4 B5    B1 B2 B3 C4 B5    B1 C2 B3 C4 B5    C1 A2 B3 C4 B5    C1 B2 B3 C4 B5    C1 C2 B3 C4 B5
A1 A2 B3 C4 C5    A1 B2 B3 C4 C5    A1 C2 B3 C4 C5    B1 A2 B3 C4 C5    B1 B2 B3 C4 C5    B1 C2 B3 C4 C5    C1 A2 B3 C4 C5    C1 B2 B3 C4 C5    C1 C2 B3 C4 C5
A1 A2 C3 A4 A5    A1 B2 C3 A4 A5    A1 C2 C3 A4 A5    B1 A2 C3 A4 A5    B1 B2 C3 A4 A5    B1 C2 C3 A4 A5    C1 A2 C3 A4 A5    C1 B2 C3 A4 A5    C1 C2 C3 A4 A5
A1 A2 C3 A4 B5    A1 B2 C3 A4 B5    A1 C2 C3 A4 B5    B1 A2 C3 A4 B5    B1 B2 C3 A4 B5    B1 C2 C3 A4 B5    C1 A2 C3 A4 B5    C1 B2 C3 A4 B5    C1 C2 C3 A4 B5
A1 A2 C3 A4 C5    A1 B2 C3 A4 C5    A1 C2 C3 A4 C5    B1 A2 C3 A4 C5    B1 B2 C3 A4 C5    B1 C2 C3 A4 C5    C1 A2 C3 A4 C5    C1 B2 C3 A4 C5    C1 C2 C3 A4 C5
A1 A2 C3 B4 A5    A1 B2 C3 B4 A5    A1 C2 C3 B4 A5    B1 A2 C3 B4 A5    B1 B2 C3 B4 A5    B1 C2 C3 B4 A5    C1 A2 C3 B4 A5    C1 B2 C3 B4 A5    C1 C2 C3 B4 A5
A1 A2 C3 B4 B5    A1 B2 C3 B4 B5    A1 C2 C3 B4 B5    B1 A2 C3 B4 B5    B1 B2 C3 B4 B5    B1 C2 C3 B4 B5    C1 A2 C3 B4 B5    C1 B2 C3 B4 B5    C1 C2 C3 B4 B5
A1 A2 C3 B4 C5    A1 B2 C3 B4 C5    A1 C2 C3 B4 C5    B1 A2 C3 B4 C5    B1 B2 C3 B4 C5    B1 C2 C3 B4 C5    C1 A2 C3 B4 C5    C1 B2 C3 B4 C5    C1 C2 C3 B4 C5
A1 A2 C3 C4 A5    A1 B2 C3 C4 A5    A1 C2 C3 C4 A5    B1 A2 C3 C4 A5    B1 B2 C3 C4 A5    B1 C2 C3 C4 A5    C1 A2 C3 C4 A5    C1 B2 C3 C4 A5    C1 C2 C3 C4 A5
A1 A2 C3 C4 B5    A1 B2 C3 C4 B5    A1 C2 C3 C4 B5    B1 A2 C3 C4 B5    B1 B2 C3 C4 B5    B1 C2 C3 C4 B5    C1 A2 C3 C4 B5    C1 B2 C3 C4 B5    C1 C2 C3 C4 B5
A1 A2 C3 C4 C5    A1 B2 C3 C4 C5    A1 C2 C3 C4 C5    B1 A2 C3 C4 C5    B1 B2 C3 C4 C5    B1 C2 C3 C4 C5    C1 A2 C3 C4 C5    C1 B2 C3 C4 C5    C1 C2 C3 C4 C5

```

##### Share on other sites

10 hours ago, ginerjm said:

Looks like your teacher is introducing you to arrays and loops.  This exercise wants you to create arrays of each set of values and then loop thru each array inside of the previous array.

10 minutes later:

I was right. It was easy.

Am no longer in class. 20 years away. Its a small project am handling an combinations and permutations are causing hell in my head.

23 hours ago, galili said:

COLUMNS

Rows    A      B         C

1          11     22       33

2         44     55       66

3         66     77       88

4         99    100    110

5         111    122    133

I have a matrix of 3 columns (A,B,C) by 5 rows (1-5).

I need loops to acquire all the possible combinations possible
The combination elements must cascade from the first row to the lower rows with ONLY one element from each row

Rules
a) Every set of combination has a max of 5 elements
a) All the combinations begins at the first row (A1 or B1 or C1) AND combines with lower elements in a belt like manner from the Top to the bottom row
c) In a set you cannot pick more than one element from the same row

Examples

right

A1,A2,A3,A4,A5
B1,A2,A3,A4,A5
C1,A2,A3,A4,A5
C1,A2,A3,A4,A5
B1,B2,A3,A4,A5

WRONG
C1,A2,B2,A4,A5 (A2 AND B2 have the same row number)
C1,A2,B2,A4,A5     (A2 & B2 have the same row number)
A3,B2,A3,B1,A5 (The first element in the set should start from the first row which is A1/B1/C1)
C5,A1,A2,A3,A4 ( the first element IN a set must be A1/B1/C1)

Im using this code but unfortunately its generating repetitions

function combinations(\$arrays, \$i = 0) {
if (!isset(\$arrays[\$i])) {
return array();
}
if (\$i == count(\$arrays) - 1) {
return \$arrays[\$i];
}

// get combinations from subsequent arrays
\$tmp = combinations(\$arrays, \$i + 1);

\$result = array();

// concat each array from tmp with each element from \$arrays[\$i]
foreach (\$arrays[\$i] as \$v) {
foreach (\$tmp as \$t) {
\$result[] = is_array(\$t) ?
array_merge(array(\$v), \$t) :
array(\$v, \$t);
}
}

return \$result;
}

print_r(
combinations(
array(
array('A1','A2','A3', 'A4', 'A5'),
array('B1','B2','B3', 'B4','B5'),
array('C1','C2','C3','C4','C5')

)
)
);

##### Share on other sites

2 hours ago, Barand said:

Does this look right?

``` A1 A2 A3 A4 A5    A1 B2 A3 A4 A5    A1 C2 A3 A4 A5    B1 A2 A3 A4 A5    B1 B2 A3 A4 A5    B1 C2 A3 A4 A5    C1 A2 A3 A4 A5    C1 B2 A3 A4 A5    C1 C2 A3 A4 A5
A1 A2 A3 A4 B5    A1 B2 A3 A4 B5    A1 C2 A3 A4 B5    B1 A2 A3 A4 B5    B1 B2 A3 A4 B5    B1 C2 A3 A4 B5    C1 A2 A3 A4 B5    C1 B2 A3 A4 B5    C1 C2 A3 A4 B5
A1 A2 A3 A4 C5    A1 B2 A3 A4 C5    A1 C2 A3 A4 C5    B1 A2 A3 A4 C5    B1 B2 A3 A4 C5    B1 C2 A3 A4 C5    C1 A2 A3 A4 C5    C1 B2 A3 A4 C5    C1 C2 A3 A4 C5
A1 A2 A3 B4 A5    A1 B2 A3 B4 A5    A1 C2 A3 B4 A5    B1 A2 A3 B4 A5    B1 B2 A3 B4 A5    B1 C2 A3 B4 A5    C1 A2 A3 B4 A5    C1 B2 A3 B4 A5    C1 C2 A3 B4 A5
A1 A2 A3 B4 B5    A1 B2 A3 B4 B5    A1 C2 A3 B4 B5    B1 A2 A3 B4 B5    B1 B2 A3 B4 B5    B1 C2 A3 B4 B5    C1 A2 A3 B4 B5    C1 B2 A3 B4 B5    C1 C2 A3 B4 B5
A1 A2 A3 B4 C5    A1 B2 A3 B4 C5    A1 C2 A3 B4 C5    B1 A2 A3 B4 C5    B1 B2 A3 B4 C5    B1 C2 A3 B4 C5    C1 A2 A3 B4 C5    C1 B2 A3 B4 C5    C1 C2 A3 B4 C5
A1 A2 A3 C4 A5    A1 B2 A3 C4 A5    A1 C2 A3 C4 A5    B1 A2 A3 C4 A5    B1 B2 A3 C4 A5    B1 C2 A3 C4 A5    C1 A2 A3 C4 A5    C1 B2 A3 C4 A5    C1 C2 A3 C4 A5
A1 A2 A3 C4 B5    A1 B2 A3 C4 B5    A1 C2 A3 C4 B5    B1 A2 A3 C4 B5    B1 B2 A3 C4 B5    B1 C2 A3 C4 B5    C1 A2 A3 C4 B5    C1 B2 A3 C4 B5    C1 C2 A3 C4 B5
A1 A2 A3 C4 C5    A1 B2 A3 C4 C5    A1 C2 A3 C4 C5    B1 A2 A3 C4 C5    B1 B2 A3 C4 C5    B1 C2 A3 C4 C5    C1 A2 A3 C4 C5    C1 B2 A3 C4 C5    C1 C2 A3 C4 C5
A1 A2 B3 A4 A5    A1 B2 B3 A4 A5    A1 C2 B3 A4 A5    B1 A2 B3 A4 A5    B1 B2 B3 A4 A5    B1 C2 B3 A4 A5    C1 A2 B3 A4 A5    C1 B2 B3 A4 A5    C1 C2 B3 A4 A5
A1 A2 B3 A4 B5    A1 B2 B3 A4 B5    A1 C2 B3 A4 B5    B1 A2 B3 A4 B5    B1 B2 B3 A4 B5    B1 C2 B3 A4 B5    C1 A2 B3 A4 B5    C1 B2 B3 A4 B5    C1 C2 B3 A4 B5
A1 A2 B3 A4 C5    A1 B2 B3 A4 C5    A1 C2 B3 A4 C5    B1 A2 B3 A4 C5    B1 B2 B3 A4 C5    B1 C2 B3 A4 C5    C1 A2 B3 A4 C5    C1 B2 B3 A4 C5    C1 C2 B3 A4 C5
A1 A2 B3 B4 A5    A1 B2 B3 B4 A5    A1 C2 B3 B4 A5    B1 A2 B3 B4 A5    B1 B2 B3 B4 A5    B1 C2 B3 B4 A5    C1 A2 B3 B4 A5    C1 B2 B3 B4 A5    C1 C2 B3 B4 A5
A1 A2 B3 B4 B5    A1 B2 B3 B4 B5    A1 C2 B3 B4 B5    B1 A2 B3 B4 B5    B1 B2 B3 B4 B5    B1 C2 B3 B4 B5    C1 A2 B3 B4 B5    C1 B2 B3 B4 B5    C1 C2 B3 B4 B5
A1 A2 B3 B4 C5    A1 B2 B3 B4 C5    A1 C2 B3 B4 C5    B1 A2 B3 B4 C5    B1 B2 B3 B4 C5    B1 C2 B3 B4 C5    C1 A2 B3 B4 C5    C1 B2 B3 B4 C5    C1 C2 B3 B4 C5
A1 A2 B3 C4 A5    A1 B2 B3 C4 A5    A1 C2 B3 C4 A5    B1 A2 B3 C4 A5    B1 B2 B3 C4 A5    B1 C2 B3 C4 A5    C1 A2 B3 C4 A5    C1 B2 B3 C4 A5    C1 C2 B3 C4 A5
A1 A2 B3 C4 B5    A1 B2 B3 C4 B5    A1 C2 B3 C4 B5    B1 A2 B3 C4 B5    B1 B2 B3 C4 B5    B1 C2 B3 C4 B5    C1 A2 B3 C4 B5    C1 B2 B3 C4 B5    C1 C2 B3 C4 B5
A1 A2 B3 C4 C5    A1 B2 B3 C4 C5    A1 C2 B3 C4 C5    B1 A2 B3 C4 C5    B1 B2 B3 C4 C5    B1 C2 B3 C4 C5    C1 A2 B3 C4 C5    C1 B2 B3 C4 C5    C1 C2 B3 C4 C5
A1 A2 C3 A4 A5    A1 B2 C3 A4 A5    A1 C2 C3 A4 A5    B1 A2 C3 A4 A5    B1 B2 C3 A4 A5    B1 C2 C3 A4 A5    C1 A2 C3 A4 A5    C1 B2 C3 A4 A5    C1 C2 C3 A4 A5
A1 A2 C3 A4 B5    A1 B2 C3 A4 B5    A1 C2 C3 A4 B5    B1 A2 C3 A4 B5    B1 B2 C3 A4 B5    B1 C2 C3 A4 B5    C1 A2 C3 A4 B5    C1 B2 C3 A4 B5    C1 C2 C3 A4 B5
A1 A2 C3 A4 C5    A1 B2 C3 A4 C5    A1 C2 C3 A4 C5    B1 A2 C3 A4 C5    B1 B2 C3 A4 C5    B1 C2 C3 A4 C5    C1 A2 C3 A4 C5    C1 B2 C3 A4 C5    C1 C2 C3 A4 C5
A1 A2 C3 B4 A5    A1 B2 C3 B4 A5    A1 C2 C3 B4 A5    B1 A2 C3 B4 A5    B1 B2 C3 B4 A5    B1 C2 C3 B4 A5    C1 A2 C3 B4 A5    C1 B2 C3 B4 A5    C1 C2 C3 B4 A5
A1 A2 C3 B4 B5    A1 B2 C3 B4 B5    A1 C2 C3 B4 B5    B1 A2 C3 B4 B5    B1 B2 C3 B4 B5    B1 C2 C3 B4 B5    C1 A2 C3 B4 B5    C1 B2 C3 B4 B5    C1 C2 C3 B4 B5
A1 A2 C3 B4 C5    A1 B2 C3 B4 C5    A1 C2 C3 B4 C5    B1 A2 C3 B4 C5    B1 B2 C3 B4 C5    B1 C2 C3 B4 C5    C1 A2 C3 B4 C5    C1 B2 C3 B4 C5    C1 C2 C3 B4 C5
A1 A2 C3 C4 A5    A1 B2 C3 C4 A5    A1 C2 C3 C4 A5    B1 A2 C3 C4 A5    B1 B2 C3 C4 A5    B1 C2 C3 C4 A5    C1 A2 C3 C4 A5    C1 B2 C3 C4 A5    C1 C2 C3 C4 A5
A1 A2 C3 C4 B5    A1 B2 C3 C4 B5    A1 C2 C3 C4 B5    B1 A2 C3 C4 B5    B1 B2 C3 C4 B5    B1 C2 C3 C4 B5    C1 A2 C3 C4 B5    C1 B2 C3 C4 B5    C1 C2 C3 C4 B5
A1 A2 C3 C4 C5    A1 B2 C3 C4 C5    A1 C2 C3 C4 C5    B1 A2 C3 C4 C5    B1 B2 C3 C4 C5    B1 C2 C3 C4 C5    C1 A2 C3 C4 C5    C1 B2 C3 C4 C5    C1 C2 C3 C4 C5

```

Can you kindly share the code i  see the logic

##### Share on other sites

I wasn't sure if you wanted the Column/Row keys like A1 A2 A3 A4 A5 or the values from the matrix (eg 11 44 66 99 111).

I used a recursive method...

```    \$combos = [];

\$matrix = [
1 => [ 'A' => 11,  'B' => 22,  'C' => 33 ],
2 => [ 'A' => 44,  'B' => 55,  'C' => 66 ],
3 => [ 'A' => 66,  'B' => 77,  'C' => 88 ],
4 => [ 'A' => 99,  'B' => 100, 'C' => 110],
5 => [ 'A' => 111, 'B' => 122, 'C' => 133]
];

buildCombos(\$matrix, \$combos, 0);

function buildCombos(&\$matrix, &\$combos, \$row, \$col='', \$com='' )
{
if (\$row > 5) return;

if (\$col) \$com .= "\$col\$row ";

foreach (['A','B','C'] as \$c) {
buildCombos(\$matrix, \$combos, \$row+1, \$c, \$com);
}

if (\$row==5) {
\$combos[] = \$com;
return;
}
}

echo '<pre>' . print_r(\$combos, 1) . '</pre>';```

##### Share on other sites

Here is what I wrote.

```\$a = array(11,22,33);
\$b = array(44,55,66);
\$c = array(66,77,88);
\$d = array(99,100,110);
\$e = array(111,122,133);
foreach(\$a as \$a_val)
foreach(\$b as \$b_val)
foreach(\$c as \$c_val)
foreach(\$d as \$d_val)
foreach(\$e as \$e_val)
echo "A:\$a_val B:\$b_val C:\$c_val D:\$d_val E:\$e_val<br>";
exit();```

##### Share on other sites

You're making it look too easy

##### Share on other sites

It was.  If I did what was asked that is.

##### Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

## Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

×   Pasted as rich text.   Restore formatting

Only 75 emoji are allowed.