Проверьте этот «красивый» код, хороший мозговой тренажер для меня :)
Это определенно требует некоторой оптимизации, но отлично работает.
Примечание: array_reverse () и strrev () могут быть удалены, но таким образом порядок выглядит лучше.
function TheFunction($s) {
for($i=strlen($s)-1;$i>0;$i--) $h .= '1';
$z = str_replace('1','0',$h);
for($i=bindec($h);$i>=0;$i--) $array[] = strrev(substr_replace($z, decbin($i), strlen($z)-strlen(decbin($i))));
foreach($array as $value){
$value = str_replace(array('0','1'),array(' ',','),$value);
$string = '';
for($i=0;$i<strlen($s)-1;$i++) $string .= $s[$i].$value[$i];
$string .= $s[strlen($s)-1];
$results[] = str_replace(' ','',$string);
}
return array_reverse($results);
}
Пример
print_r(TheFunction('Anne'));
Возвращает
Array
(
[0] => Anne
[1] => A,nne
[2] => An,ne
[3] => A,n,ne
[4] => Ann,e
[5] => A,nn,e
[6] => An,n,e
[7] => A,n,n,e
)
Другой пример
print_r(TheFunction('Stack'));
Возвращает:
Array
(
[0] => Stack
[1] => S,tack
[2] => St,ack
[3] => S,t,ack
[4] => Sta,ck
[5] => S,ta,ck
[6] => St,a,ck
[7] => S,t,a,ck
[8] => Stac,k
[9] => S,tac,k
[10] => St,ac,k
[11] => S,t,ac,k
[12] => Sta,c,k
[13] => S,ta,c,k
[14] => St,a,c,k
[15] => S,t,a,c,k
)