在 PHP 中创建多个数组的笛卡尔积
考虑如下 PHP 数组结构:
$array[0][0] = 'apples'; $array[0][1] = 'pears'; $array[0][2] = 'oranges'; $array[1][0] = 'steve'; $array[1][1] = 'bob';
目标:生成这些数组中所有可能的元素组合的表格列表,而不需要
解决方案:
从多个数组生成所有可能组合的概念称为“笛卡尔积”。在 PHP 中,有多种方法可以实现此目的。
一种方法是利用 PHP 的数组函数。以下代码片段使用 func_get_args() 和递归实现笛卡尔积:
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') );
结果存储在 $cross 中,将是一个包含所有可能组合的数组:
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中文网其他相关文章!