Jump to content

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)
 

Link to comment
https://forums.phpfreaks.com/topic/315846-matrix-combination/
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.

 

Link to comment
https://forums.phpfreaks.com/topic/315846-matrix-combination/#findComment-1605124
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 
 

 

Link to comment
https://forums.phpfreaks.com/topic/315846-matrix-combination/#findComment-1605136
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')

        )
    )
);

 

Link to comment
https://forums.phpfreaks.com/topic/315846-matrix-combination/#findComment-1605139
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

Link to comment
https://forums.phpfreaks.com/topic/315846-matrix-combination/#findComment-1605140
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>';

 

Link to comment
https://forums.phpfreaks.com/topic/315846-matrix-combination/#findComment-1605148
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();

 

Link to comment
https://forums.phpfreaks.com/topic/315846-matrix-combination/#findComment-1605152
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.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.