如何将“每个人与每个人结合”的行动称为?

时间:2010-11-13 22:14:03

标签: php arrays matrix operators

我有一个用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
)

我试图找到一个代码片段为我做这个,但我失败了因为我甚至不知道这种操作是否有名字。有吗?

(我不希望任何人编写该代码片段,我自己也可以这样做。)

2 个答案:

答案 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);
    }
}