shenhhd
2018-08-10 10:46:26 +08:00
上个月公司遇到类似的问题
计算所有的组合
1.递归版本 (同事写的)
function add_one(&$arr,$list,$num,$str="",$deep=0){
if($deep==$num){
$arr[]=$str;
return;
}
foreach($list as $one){
$str_tmp=$one.$str;
add_one($arr,$list,$num,$str_tmp,$deep+1);
}
}
$arr=[];
add_one($arr,[1,2,3,4,5],5);
var_dump($arr);
2.普通过程版
public function test_fun($number, $arr) {
$arr_len = count($arr) - 1; //下标最大值
for ($i = 0; $i < $number; $i++) {
//初始化一个数组
$arr_key[$i] = 0;
}
while (true) {
$str = '';
foreach ($arr_key as $v) {
$str .= $arr[$v];
}
echo $str;
echo PHP_EOL;
$is_break = true;
foreach ($arr_key as $k => $v) {
if ($v == $arr_len) {
$arr_key[$k] = 0;
} else {
$arr_key[$k] = $v + 1;
$is_break = false;
break;
}
}
if ($is_break) {
break;
}
}
}
test_fun(5, [1,2,3,4,5]);