我正在尝试为多个输入计算数组中一组值的所有组合。类似于这个问题:
例如:
function sampling($chars, $size, $combinations = array()) {
if (empty($combinations)) {
$combinations = $chars;
}
if ($size == 1) {
return $combinations;
}
$new_combinations = array();
foreach ($combinations as $combination) {
foreach ($chars as $char) {
$new_combinations[] = $combination . $char;
}
}
return sampling($chars, $size - 1, $new_combinations);
}
$chars = array('a', 'b', 'c');
$output = sampling($chars, 2);
echo implode($output,', ');
输出:
aa, ab, ac, ba, bb, bc, ca, cb, cc
但问题是当我将其增加到更大的列表时,例如:
$chars = array('a', 'b', 'c', 'd');
$output = sampling($chars, 12);
排列的数量急剧增加,PHP 内存不足。显然,解决方案是使用生成器并在整个循环过程中产生结果。生成器的唯一示例是针对略有不同的问题集:
请参阅: https ://stackoverflow.com/a/27160465/345086
关于如何使用生成器来解决这个问题的任何想法?