Php “这是怎么回事?”;把每一个与每一个结合起来;什么行动?

Php “这是怎么回事?”;把每一个与每一个结合起来;什么行动?,php,arrays,matrix,operators,Php,Arrays,Matrix,Operators,我有一个用PHP表示为数组的矩阵: array( array('a','b'), // a | b array('c','d') // c | d ) 我还有第二个矩阵,以类似的方式表示(这里没有内部数组,但我不介意添加它们): 我想要一个这样的组合: array( array('a','b','e'), // a | b | e array('c','d','e') // c | d | e array('a','b

我有一个用PHP表示为数组的矩阵:

array(
    array('a','b'),   //   a | b
    array('c','d')    //   c | d
)
我还有第二个矩阵,以类似的方式表示(这里没有内部数组,但我不介意添加它们):

我想要一个这样的组合:

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
)
我试图找到一个代码片段来为我实现这一点,但我失败了,因为我甚至不知道这种操作是否有名称。是吗


(我不想让任何人编写那个代码片段,我可以自己编写。)

您要找的是笛卡尔积。没有本机PHP函数可以计算该值。

为了防止其他人需要实现,下面将创建两个数组的笛卡尔乘积:

$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);
    }
}

我从SQL/集合论中知道这个术语,并发现了一些实现,但如果左边的元素已经是有序对,那么它们都不起作用。无论如何接受。如果你想要一个实现,我很乐意提出一个建议。然而,你在问题中说你不想要一个。
$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);
    }
}