I'm stuck and putting my brain to work trying to solve this problem. I have this array:
$options = array(
'Group 1' => array( 'Track 1', 'Track 2', 'Track 3'),
'Group 2' => array( 'Track 4', 'Track 5', 'Track 6'),
'Gruop 3' => array( 'Track 7', 'Track 8', 'Track 9'),
'Group 4' => array( 'Track 10', 'Track 11', 'Track 12'),
'Group 5' => array( 'Track 13', 'Track 14', 'Track 15')
);
And I need to create a full set of 10 elements using two elements of each group following the ascendent order and avoiding a set with the same elements as another, like the example below:
I'm actually able to get only one item from each group:
function create_set( $t, $terms, $i ) {
$text = '';
if ( $i >= count( $terms ) ) {
$text .= trim( $t ) . "\n";
}
else {
foreach ( $terms[$i] as $term ) {
$text .= create_set( $t . $term . '##', $terms, $i + 1 );
}
}
return $text;
}
$options = array(
'Group 1' => array( 'I am track 1', 'I am track 2', 'I am track 3'),
'Group 2' => array( 'I am track 4', 'I am track 5', 'I am track 6'),
'Gruop 3' => array( 'I am track 7', 'I am track 8', 'I am track 9'),
'Group 4' => array( 'I am track 10', 'I am track 11', 'I am track 12'),
'Group 5' => array( 'I am track 13', 'I am track 14', 'I am track 15')
);
$combine = array();
foreach( $options as $k => $v ) {
$combine[] = $v;
}
$text = create_set( '', $combine, 0 );
$text = preg_split( '/\n/', $text, -1, PREG_SPLIT_NO_EMPTY );
$combinations = array();
foreach( $text as $k => $v ) {
$combinations[] = preg_split( '/##/', $v, -1, PREG_SPLIT_NO_EMPTY );
}
echo "<pre>";
print_r( $combinations );
echo "</pre>";
exit;
Result:
Array
(
[0] => Array
(
[0] => I am track 1
[1] => I am track 4
[2] => I am track 7
[3] => I am track 10
[4] => I am track 13
)
Thank you very much for any help.