数组
$array = [1,2,3,4]; // 多位数也可以
以下是所需第一种方式结果
以下是具体实现代码
public function getSortList($array,$level = -1,&$list =[])
{
for ($i=0; $i < count($array); $i++) {
if($level < 0){
//第一级直接输出对应数字
$list[] = $array[$i];
}else{
$values = $array[$i];
//根据等级组装前几位
for ($k=0; $k < $level ; $k++) {
$values .= '+'.$array[$i+$k+1];
}
$j= 0;
//循环拼合最后一位
for ($n=($i+$level+1); $n < count($array); $n++) {
$j++;
$first = $values; // 组合上几位
$first .= '+'.$array[$n];
$list[] = $first;
}
//到最后一位结束递归
if($j == 1){
break;
}
}
}
//长度大于等级+2停止递归
if(($level+2) < count($array)){
$this->getSortList($array,$level+1,$list);
}
return $list;
}
还有另外一种结果
排序的方式不同
public function getSortList($array,$index = 0,$up =0,&$result =[])
{
for ($i=$index; $i < count($array); $i++) {
if($index > 0 ){
$value = $up.$array[$i];
}else{
$value = $array[$i];
}
$result[] = $value;
$this->getSortList($array,$i+1,$value,$result);
}
return $result ;
}
如果有更好的方式,也请大家评论提供参考