首页  >  文章  >  后端开发  >  如何在 PHP 中生成多个数组的笛卡尔积?

如何在 PHP 中生成多个数组的笛卡尔积?

Patricia Arquette
Patricia Arquette原创
2024-11-12 10:40:02879浏览

How to Generate the Cartesian Product of Multiple Arrays in PHP?

在 PHP 中生成多个数组的笛卡尔积

简介:
从多个数组生成组合是编程中的常见任务。这些数组的笛卡尔积是输入数组中所有可能的元素组合的列表。

问题:
给定一个具有多个子数组的数组,我们想要生成一个表包含这些子数组中元素的所有唯一组合。例如,如果我们有两个子数组:

$array[0][0] = 'apples';
$array[0][1] = 'pears';
$array[0][2] = 'oranges';

$array[1][0] = 'steve';
$array[1][1] = 'bob';

我们期望输出为:

Array 0            Array 1
apples             steve
apples             bob
pears              steve
pears              bob

解决方案:笛卡尔积
此问题需要计算笛卡尔积,从多个数组生成所有可能的元素组合。

实现:
计算笛卡尔积的一种方法涉及使用递归函数。这是一个示例实现:

function array_cartesian() {
    $_ = func_get_args();
    if(count($_) == 0)
        return array(array());
    $a = array_shift($_);
    $c = call_user_func_array(__FUNCTION__, $_);
    $r = array();
    foreach($a as $v)
        foreach($c as $p)
            $r[] = array_merge(array($v), $p);
    return $r;
}

此函数采用多个数组作为输入。它迭代第一个数组并将其每个元素与其余数组的所有可能组合组合起来。结果是所有唯一组合的列表。

示例:
让我们将解决方案应用于我们的示例:

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

这符合我们的预期输出。

以上是如何在 PHP 中生成多个数组的笛卡尔积?的详细内容。更多信息请关注PHP中文网其他相关文章!

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