The classic Cartesian product code, how do you modify it?
Cartesian Product Code:
function Descartes () {
$t = Func_get_args ();
if (Func_num_args () = = 1) return Call_user_func_array (__function__, $t [0]);
$a = Array_shift ($t);
if (! Is_array ($a)) $a = array ($a);
$a = Array_chunk ($a, 1);
do {
$r = Array ();
$b = Array_shift ($t);
if (! Is_array ($b)) $b = Array ($b);
foreach ($a as $p)
foreach (Array_chunk ($b, 1) as $q)
$r [] = Array_merge ($p, $q);
$a = $r;
}while ($t);
return $r;
}
$arr = Array (
Array (' A1 ', ' A2 '),
' B ',
Array (' C1 ', ' C2 '),
Array (' D1 ', ' D2 ', ' D3 '),
Array (' E1 ', ' E2 ', ' E3 ')
//...... Omit other elements (which can also be arrays),
);
$r = Descartes ($arr);
Print_r ($R);
?>
//////////////////////////////////////
Output:
Array
(
[0] = = Array
(
[0] = A1
[1] = b
[2] = C1
[3] = D1
[4] = E1
)
[1] = = Array
(
[0] = A1
[1] = b
[2] = C1
[3] = D1
[4] = E2
)
...。。。
)
////////////////////
Now I want only 3 elements, the first element to have A1 or A2. How do you change that code?
Array
(
[0] = = Array
(
[0] = A1
[1] = b
[2] = C1
)
......
[1] = = Array
(
[0] = A2
[1] = C2
[2] = D3
)
......
)
------Solution--------------------
For
$arr = Array (
Array (' A1 ', ' A2 '),
' B ',
Array (' C1 ', ' C2 '),
Array (' D1 ', ' D2 ', ' D3 '),
Array (' E1 ', ' E2 ', ' E3 ')
//...... Omit other elements (which can also be arrays),
);
You need to first
$arr = Array (
' B ',
Array (' C1 ', ' C2 '),
Array (' D1 ', ' D2 ', ' D3 '),
Array (' E1 ', ' E2 ', ' E3 ')
//...... Omit other elements (which can also be arrays),
);
Ask M to take 2 combination
$c = combination ($arr, 2);
Then we find the Cartesian product of the combined result.
$r = Array ();
foreach ($c as $v)
$r = Array_merge ($r, Descartes (Array (' A1 ', ' A2 '), $v [0], $v [1]);
Print_r ($R);
PHP Code
Array ([0] = = Array ([0] = a1 [1] = D1 [2] = e1) [1] = = Array ([0] = a1 [1] = D1 [2] = = E2) [2] = = Array ([0] = a1 [1] = D1 [2] = E3) [3] = = Array ( [0] = = A1 [1] = D2 [2] = e1) [4] = = Array ([0] =& Gt a1 [1] = D2 [2] = e2) [5] = = Array ([0] = A1 [1] = = D2 [2] = E3) [6] = = Array ([0] = a1 [1] = D3 [2] = = e1) [7] = = Array ([0] = a1 [1] = D3 [ 2] = e2) [8] = = Array ([0] = a1 [1] = d3 [2] = E3 ) [9] = = Array ([0] = a2 [1] = D1 [2] = e1) [Ten] = = array ([0] = a2 [1] = D1 [2] = E2) [one] = = Array ( [0] = = a2 [1] = D1 [2] = E3) [] = = Array ([0] = = a2 [1] = D2 [2] = e1) [] = = Array ([0] = A2 [1] = = D2 [2] = e2) [+] = Array ([0] = a2 [1] = = D2 [2] = e3) [[0] = = [1] = = = =/-A2] = D3 [2] = e1) [+] = Array ([0] = a2 [1] = = D3 [2] = = E2) [+] = Array ([0] = a2 [1] = d3 [2] = = E3) [+] = Array ([0] = a1 [1] = C1 [2] = e1) [+] = = Array ( [0] = = A1 [1] = C1 [2] = e2) [] = = Array ([0] =&G T a1 [1] = C1 [2] = E3) [+] = Array ([0] = A1 [1] = = C2 [2] = e1) [] = = Array ([0] = a1 [1] = = C2 [2] = e2) [+] = Array ([0] = a1 [1] = = C2 E1) [+] = Array ([0] = a2 [1] = C1 [2] = = E2) [+] = Array ([0] = a2 [1] = C1 [2] = E3) [] => ; Array ( [0] = = a2 [1] = C2 [2] = e1) [] = = Array ([0] = > a2 [1] = C2 [2] = e2) [+] = Array ([0] = A2 [1] = = C2 [2] = E3) [+] = = Array ([0] = = A1 [1] = > c1 [2] = D1) [+] = Array ([0] = a1 [1] = = C1 [2] = = D2) [+] = Array ([0] = a1 [1] = = C1 [2] = > d3) = = Array ([0] = a1 [1] = C2 [2] = = D1 ) [+] = Array ([0] = a1 [1] = C2 [2] = = D2) [35] = = Array ([0] = a1 [1] = C2 [2] = = D3) [+] = = Array ([0] = A2 [1] = C1 [2] = D1) [PNS] = Array ([0] = A2 [1] = = C1 [2] = D2) [] = = Array ([0] = A2 [1] = C1 [2] = d3) [[0] = = [1] = = = = =/-A2] = C2 [2] = D1) [+] = Array ([0] = a2 [1] = = C2 [2] = D2) [[0] = a2 [1] = = C2 [2] = = D3 ) [[0] = = = [1] = = [2] = = = [43] = = = = = A1 ] = = Array ([0] = a1 [1] = = b [2] = e2) [] + = array ([0] = a1 [1] = b [2] = E3) [] = = Array ( [0] = A2 [1] [+] = b [2] = e1) [] = = Array ([0] = = a2 [1] = > b [2] = e2) [+] = = Array ([0] = a2 [1] = b ; D1) [+] = Array ([0] = a1 [1] = b [2] = = D2) [[0] = = = [1] = = [2] = = = = = = [+] = = = = = = = A1 Array ([0] = a2 [1] = b [2] = D1) [*] = = Array ([0] = a2 [1] = b [2] = D2) [+] = = Array ( [0] = a2 [1] = b [2] = d3) [Si] = Array ([0] = A1 [1] = b [2] = C1) [+] = Array ([0] = a1 [1] = = b [ 2] = [C2] [+] = Array ([0] = a2 [1] = = b [2] = = C1 ) [[0] = [+] = [1] = = [2] = (+/-A2)]