$option1 = array('apple', 'orange', 'pear');
$option2 = array('rice', 'noodle');
And we must find all combinations(there are 6 of them in this example) of these two array elements:
'apple', 'rice',
'apple', 'noodle',
'orange', 'rice',
'orange', 'noodle',
'pear', 'rice',
'pear', 'noodle'
First, let's see how to implement the algorithm in PHP:
//$allOptionsArray is an array containing all options array
//$final is a stdClass
function getCombinations($allOptionsArray, $final) {
if(count($allOptionsArray)) {
for($i=0; $i < count($allOptionsArray[0]); $i++) {
$tmp = $allOptionsArray;
$final->codes[$final->pos] = $allOptionsArray[0][$i];
array_shift($tmp);
$final->pos++;
getCombinations($tmp, $final);
}
} else {
$final->result[] = $final->codes;
}
$final->pos--;
}
//let's see how to use the function:
$option1 = array('apple', 'orange', 'pear');
$option2 = array('rice', 'noodle');
$allOptionsArray = array($option1, $option2);
$final = new stdClass();
$final->result = array();
$final->codes = array();
$final->pos = 0;
getCombinations($allOptionsArray, $final);
//$final->result is an array containing all possible combinations
var_dump($final->result);
We can easily implement same algorithm in javascript:
var getCombinations = function(allOptionsArray, combination) {
if(allOptionsArray.length > 0) {
for(var i=0; i < allOptionsArray[0].length; i++) {
var tmp = allOptionsArray.slice(0);
combination.codes[combination.counter] = allOptionsArray[0][i];
tmp.shift();
combination.counter++;
getCombinations(tmp, combination);
}
} else {
var combi = combination.codes.slice(0);
combination.result.push(combi);
}
combination.counter--;
}
//use it:
var a = ["01", "02", "03", "04"];
var b = ["white", "green", "blue", "red"];
var c = ["one", "two", "three", "four"];
var d = ["a", "b", "c", "d"];
var allOptionsArray = [a, b, c, d];
var combination = {codes : [], result : [], counter : 0};
getCombinations(allOptionsArray, combination);
for(var i=0; i < combination.result.length; i++) {
console.log(combination.result[i]);
}