我需要一个函数,该函数将返回输入数组的所有可能唯一变化,但不重复数组元素,因此[a,b,c]和[b,c,a]相同。
我有一个工作函数,可以使用二进制计数输出所需的结果。因此,对于array("a", "b", "c")
的输入数组,它将输出:
Array
(
[0] => Array
(
[0] => c
)
[1] => Array
(
[0] => b
)
[2] => Array
(
[0] => b
[1] => c
)
[3] => Array
(
[0] => a
)
[4] => Array
(
[0] => a
[1] => c
)
[5] => Array
(
[0] => a
[1] => b
)
[6] => Array
(
[0] => a
[1] => b
[2] => c
)
)
但是我发现对于具有20个或更多元素的数组,代码用完了内存。 我怀疑是因为$binary
变量
我正在使用的代码是:
function find_unique_combinations($arr){
$bits = count($arr);
$dec = 1;
while($dec < pow(2, $bits)) {
$binary = str_split(str_pad(decbin($dec), $bits, '0', STR_PAD_LEFT));
$curterm = array();
$i = 0;
while($i < ($bits)){
if($binary[$i] == 1) {
$curterm[] = $arr[$i];
}
$i++;
}
$terms[] = $curterm;
$dec++;
}
return $terms;
}
我收到的错误消息是
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 36 bytes)
php.ini当前设置为512MB,我宁愿修复代码,也不愿在可能的情况下分配更多的内存。
答案 0 :(得分:0)
因此,经过大量分析并分解了代码,我得出的结论是,无论如何对函数进行编码,都会发生内存耗尽错误。随着数组元素数量的增加,可能的组合数量也成倍增加,达到系统内存限制。
因此,我将输入数组限制为15,这将产生32,768种可能的组合。这应该涵盖此功能最可能的用例。感谢@Anant_Singh看看。