首页 >后端开发 >php教程 >如何在 PHP 中生成多个数组的笛卡尔积,同时消除重复?

如何在 PHP 中生成多个数组的笛卡尔积,同时消除重复?

DDD
DDD原创
2024-11-26 03:19:09229浏览

How can I generate the Cartesian product of multiple arrays in PHP while eliminating repetitions?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn