发布时间:2018-09-13 11:37:26
发布作者:admin
5759
/**
* 無重複排列組合
* @Author MAX
* @DateTime 2018-09-07T16:28:40+0800
* @param Array $arr 需要排列組合的數組
* @param Number $m 每几個一組
* @param [Array] $push 添加到組合數組裏
* @return Array 組合好的數組
*/
function getCombinationToString($arr, $m, $push=null) {
$rst = array();
for($i = 0; $i < pow(2, count($arr)); $i++) {
$a = 0;
$b = array();
for($j = 0; $j < count($arr); $j++) {
if($i >> $j & 1) {
$a++;
array_push($b, $arr[$j]);
}
}
if($a == $m) {
if(!is_null($push)){
if(is_string($push)){
$b = array_unshift($b, $push);
}else{
$b = array_merge($push, $b);
}
}
$rst[] = $b;
}
}
return $rst;
}
例2:
function getCombinationToString($arr, $m)
{
$result = array();
if ($m ==1)
{
return $arr;
}
if ($m == count($arr))
{
$result[] = implode(',' , $arr);
return $result;
}
$temp_firstelement = $arr[0];
unset($arr[0]);
$arr = array_values($arr);
$temp_list1 = $this->getCombinationToString($arr, ($m-1));
foreach ($temp_list1 as $s)
{
$s = $temp_firstelement.','.$s;
$result[] = $s;
}
unset($temp_list1);
$temp_list2 = $this->getCombinationToString($arr, $m);
foreach ($temp_list2 as $s)
{
$result[] = $s;
}
unset($temp_list2);
return $result;
}