这是一个简单的算法。从1迭代到2 count(array) -1。在每次迭代中,如果循环计数器的二进制表示形式中的第j位等于1,则在组合中包含第j个元素。
由于PHP需要能够将2个count(array)计算为整数,因此它永远不能超过
PHP_INT_MAX。在64位PHP安装上,您的数组不能包含62个以上的元素,因为2
62保留在下面,
PHP_INT_MAX而2 63保留在下面。
编辑:这将计算所有可能的组合,而不是排列(即’abc’=’cba’)。它通过用二进制表示原始数组并从0到整个数组的二进制表示“计数”来实现,从而有效地构建了每个可能唯一组合的列表。
$a = array('a', 'b', 'c', 'd');$len = count($a);$list = array();for($i = 1; $i < (1 << $len); $i++) { $c = ''; for($j = 0; $j < $len; $j++) if($i & (1 << $j)) $c .= $a[$j]; $list[] = $c;}print_r($list);


