具有2个连接器的一个数组的所有组合



我的问题比较简单,但是我不能自己找出一个合理的算法

我有一个任意长度的数组(n>=2),我想用两个分隔符('_'和'+')连接元素:

例如,当我的数组有两个元素[0,1],结果将是[0_1, 0+1]

For 3个元素[0,1,2]

0_1_2,
0+1+2, 
0+1_2, 
0_1+2,  
0_2+1

For 4 elements [0,1,2,3]

0_1_2_3,
0+1+2+3, 
0+1_2_3, 
0_1+2_3, 
0_1_2+3, 
0_2+1+3,
0_2+1_3,
0_3+1+2,
0_3+1_2

For 5个元素[0,1,2,3,4]

0_1_2_3_4, 
0+1_2_3_4, 
0_1+2_3_4, 
0_1_2+3_4,
0_1_2_3+4,  
0+1+2+3+4,
0_2+1+3+4,
0_2+1_3_4,
0_2+1+3_4,
0_2+1_3+4,
...

我希望这个解释是比较清楚的。

不确定这是否符合规范,但这是一个开始:

$new = [];
$arr = [1,2,3,4,5];
for($i=0;$i<count($arr);$i++) {
$new[] = implode("_",$arr);
$arr[] = array_shift($arr);
}
foreach($new as $n) {
$o = $n;
while(strpos($o,"_")) {
$o = preg_replace("/_/","+",$o,1);
$new[] = $o;
}
$o = strrev($n);
while(strpos($o,"_")) {
$o = preg_replace("/_/","+",$o,1);
$new[] = $o;
}
}
print_r($new);

最新更新