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