Как я могу перенаправить свои коды в правильный цикл для этой проблемы в PHP? - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу сделать из слова "dsafasd".

d
s
a
f
ds
sd
dsa
asd
dsaf
fsad
dsafa
afasd
etc.. 

Пока последнее слово не будет "dsafasd".

Таким образом, последовательность будет такой в ​​строковой позиции

0
1
2
3
01
65
012
654
0123
6543
01234
65432
etc..

До последнего слова 0123456 в строке.

На первом этапе будет напечатана 1 буква слева направо от середины.
На втором этапе будет напечатано 2 буквы слева ивправо.
На третьем этапе он напечатает 3 буквы слева и справа.
Этот этап будет продолжаться до тех пор, пока в результате не будет напечатано то же слово, что и введенное слово.

Моя проблема в том, что я не знаюНе знаю, как сделать приращение от f до ds, sd до dsa и так далее. Я знаю, что мне нужно 1 или более for для длины внутри substr($word,$i,1) и 2 или более if для идентификации. Мне нужно остановиться на этой длине, перейти к длине + 1 и распечатать их вперед и назад, но я неЯ не знаю, как критерии или логика в нем.

Вот некоторые мысли в моей голове:

$a = "dsafasd";
$b = strlen($a);
$c = ($lengthWord+1)/2;

$i=0;
$h=1;
do {
do {
echo substr($a,$i,$h),"<br>";
$i++;
} while ($i!=$c);#First Phase ends here
$h++;
$i=0;
echo substr($a,$i,$h),"<br>";
echo strrev(substr($a,$i,$h)),"<br>";
} while ($h<!=$b);

И получается:

d
s
a
f
ds
sd
ds <--
sa <--
af <--
fa <--
dsa
asd
dsa <--
saf <--
afa <--
fas <--
dsaf
fasd
dsaf <--
safa <--
afas <--
fasd <--
dsafa
afasd
dsafa <--
safas <--
afasd <--
fasd <--
dsafas
safasd
dsafas <--
safasd <--
afasd <--
fasd <--
dsafasd
dsafasd <--

Я не могу остановить его после того, как было развернуто 2-е слово и двойное слово в последней последовательности. Которые делают слова на моих отметках <-- не должно существовать.

1 Ответ

0 голосов
/ 07 ноября 2019

Вот решение, которое я придумал, используя вложенные циклы. См. Код, выходные данные и пояснения ниже.

Код:

$str = "dsafasd";
$length = strlen($str);

for($i=1; $i<=$length; $i++) {
    if($i==1) {
        for($x=0; $x<$length; $x++) {
            echo substr($str,$x,$i)."<br>"; 
            if($x == floor($length/2)) break;
        }
    } else {
        $subStr = substr($str,0,$i);
        echo $subStr."<br>";
        if($subStr == $str) break;
        echo strrev($subStr)."<br>";
    }
}

Версия кода 2:

for($i=1; $i<=$length; $i++) {
    if($i==1) {
        for($x=0; $x<$length; $x++) {
            echo substr($str,$x,$i)."<br>"; 
            if($x == floor($length/2)) break;
        }
    } else {
        $subStr = substr($str,0,$i);
        echo $subStr."<br>";
        if($subStr == $str) break;
        $offset = $length-$i;
        echo substr($str,$offset,$i)."<br>";
    }
}

Выход:

d
s
a
f
ds
sd
dsa
asd
dsaf
fasd
dsafa
afasd
dsafas
safasd
dsafasd

Объяснение:

Внешний цикл создает переменную $ i, которая представляет длину или подстроку, которая будет создана.

Если строка выходного сигнала имеет 1 символ, будет выполняться внутренний цикл . Это создает переменную $ x, которая представляет начальную позицию подстроки. Условное прерывает цикл, когда достигает половины строки, как вы и просили.

В операторе else (что означает, что выходная строка больше 1 символа) мы выводим первые n символов, гдеn = $ i. Затем мы повторим обратное значение.

Наконец, есть условие останова , которое остановит цикл после того, как вы выведете «dsafasd».

Код версии 2 выполнитто же самое, но не меняет вывод. Вместо этого он получает последние n букв строки. Выводит тот же результат.

Надеюсь, это то, что вы искали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...