我有一个用PHP表示的矩阵作为数组:
array(
array('a','b'), // a | b
array('c','d') // c | d
)
我有一个以类似方式表示的第二个矩阵(这里没有内部数组,但我不介意添加它们):
array(
'e', // e
'f' // f
)
我希望有这样的组合:
array(
array('a','b','e'), // a | b | e
array('c','d','e') // c | d | e
array('a','b','f'), // a | b | f
array('c','d','f') // c | d | f
)
我试图找到一个代码片段为我做这个,但我失败了因为我甚至不知道这种操作是否有名字。有吗?
(我不希望任何人编写该代码片段,我自己也可以这样做。)
答案 0 :(得分:2)
您正在寻找的是笛卡尔积。没有本机PHP函数来计算它。
答案 1 :(得分:0)
以防其他人 想要实现,以下将创建两个数组的笛卡尔积:
$cartesian_product_values = array();
$cartesian_product_arrays = array();
foreach($array1 as $a1) {
foreach($array2 as $a2) {
//Concatenate values in arrays
$cartesian_product_values[] = $a1.$a2;
$cartesian_product_values[] = $a2.$a1;
//Or merge arrays
$cartesian_product_arrays[] = array_merge($a1, $a2);
}
}
另外,如果你想在最终数组中使用$ array1和$ array2中的值,你可以在嵌套的foreach循环之前将两个数组合并在一起:
$cartesian_product = array_merge($array1, $array2);
foreach($array1 as $a1) {
foreach($array2 as $a2) {
array_push($cartesian_product, $a1.$a2);
array_push($cartesian_product, $a2.$a1);
}
}