Xakephp
@Xakephp

Как разобрать текст на php без повторений?

Нужен код на php который разбирает текст по такому принципу
1) кораблик плавал плавал и утонул
2) кораблик плавал плавал и
3) плавал плавал и утонул
4) кораблик плавал плавал
5) плавал и утонул
6) кораблик плавал
7) плавал плавал
8) плавал и
9) и утонул
10) кораблик
11) плавал
12) и
13) утонул
Возможно я чет пропустил, точно не знаю

пример на javascript
jsfiddle.net/petroveg/agwtd8vz
  • Вопрос задан
  • 2471 просмотр
Решения вопроса 1
akubintsev
@akubintsev
Опытный backend разработчик
$string = 'кораблик плавал плавал и утонул';
$wordArray = explode(' ', $string);
$wordsCount = count($wordArray);
$result = $dupArray = [];


for ($i = 0; $i <= $wordsCount; $i++) {
    for ($j = 0; $j < $i; $j++) {
        $pos = $wordsCount - $i + 1; // length для slice в php относительно offset, а не начала массива
        $stroke = implode(' ', array_slice($wordArray, $j, $pos));

        if (!isset($dupArray[$stroke])) {
            $dupArray[$stroke] = array_push($result, $stroke);
        }
    }
}

echo implode("\n", $result);
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
cjbars
@cjbars
ideone.com/FPwele

на входе Бондаренко Николай Петрович
на выходе:
Бондаренко Николай Петрович
Николай Бондаренко Петрович
Бондаренко Петрович Николай
Петрович Бондаренко Николай
Николай Петрович Бондаренко
Петрович Николай Бондаренко
Ответ написан
Xakephp
@Xakephp Автор вопроса
как пример могу еще такой вариант показать.
работает неправильно.
$start = explode(' ', 'кораблик плавал плавал и утонул');

for ($i = 0, $result = array(), $_result = array(), $length = count($start); $i <= $length; $i++) {
    for ($j =0; $j < $i; $j++) {
        $stroke = join(' ', array_slice($start, $j, $j + $length - $i + 1));

        if (!isset($_result[$stroke])) {
            $_result[$stroke] = array_push($result, $stroke);
        }
    }
}

echo join('<br>', $result);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы