在 PHP 中从多个数组生成组合
简介
生成所有组合的任务在组合优化问题中经常遇到来自多个数组的项目。本文提出了一种递归解决方案,解决了对可以处理可变数量源数组的函数的需求。
问题陈述
给定几个具有不同数量的数组elements,找到所有项目的组合,其中组合的数量等于每个数组中元素数量的乘积。例如,给定以下数组:
$arrayA = array('A1','A2','A3'); $arrayB = array('B1','B2','B3'); $arrayC = array('C1','C2');
我们的目标是生成 18 种组合的数组:
[ ['A1', 'B1', 'C1'], ['A1', 'B1', 'C2'], ['A1', 'B2', 'C1'], ... ]
递归解决方案
以下递归函数生成所有可能的组合items:
function combinations($arrays, $i = 0) { // If reaching the last array, return the array itself if (!isset($arrays[$i])) { return array(); } // If at the parent array, return the recursive call to the following array if ($i == count($arrays) - 1) { return $arrays[$i]; } // Get combinations from subsequent arrays $tmp = combinations($arrays, $i + 1); $result = array(); // Concatenate each array from tmp with each element from $arrays[$i] foreach ($arrays[$i] as $v) { foreach ($tmp as $t) { $result[] = is_array($t) ? array_merge(array($v), $t) : array($v, $t); } } return $result; }
演示
以下代码演示了组合函数的用法:
print_r( combinations( array( array('A1','A2','A3'), array('B1','B2','B3'), array('C1','C2') ) ) );
这将输出预期的数组18 种组合。
以上是如何在 PHP 中递归地从多个数组生成所有组合?的详细内容。更多信息请关注PHP中文网其他相关文章!