在 PHP 中计算多个数组的笛卡尔积
问题:
给定多个 PHP数组,我们如何生成一个笛卡尔积,将每个数组中所有可能的元素组合组合起来数组,排除重复?
解决方案:
要在 PHP 中获得笛卡尔积,我们可以定义一个名为 array_cartesian 的递归函数。该函数采用输入数组的数组作为参数。基本情况发生在数组数量为零时,在这种情况下,返回数组内的空数组。否则,该函数使用 array_shift 函数从列表中删除第一个数组,然后用剩余的数组递归地调用自身。
对于第一个数组中的每个元素 v,该函数迭代每个子数组p 是剩余数组的笛卡尔积。然后,它通过合并 v 和 p 来构造一个新的子数组,并将该子数组添加到生成的笛卡尔积中。
示例:
考虑以下集合数组:
$array[0][0] = 'apples'; $array[0][1] = 'pears'; $array[0][2] = 'oranges'; $array[1][0] = 'steve'; $array[1][1] = 'bob';
通过将这些数组传递给 array_cartesian 函数,我们可以获得笛卡尔积:
$cross = array_cartesian( array('apples', 'pears', 'oranges'), array('steve', 'bob') ); print_r($cross);
产生以下输出:
Array ( [0] => Array ( [0] => apples [1] => steve ) [1] => Array ( [0] => apples [1] => bob ) [2] => Array ( [0] => pears [1] => steve ) [3] => Array ( [0] => pears [1] => bob ) [4] => Array ( [0] => oranges [1] => steve ) [5] => Array ( [0] => oranges [1] => bob ) )
因此,该函数有效地从输入数组生成元素的所有唯一组合。
以上是如何在 PHP 中生成多个数组的笛卡尔积,同时消除重复?的详细内容。更多信息请关注PHP中文网其他相关文章!