Самый быстрый способ связать слова в массиве PHP

У меня есть предложение в простой строке PHP:

$myString = "This is a test.";

Мне нужен массив, который содержит все возможные связи между двумя словами или двумя группами слов следующим образом (пробел в качестве разделителя):

$myArray = [
["This", "is"],
["This", "is a"],
["This", "is a test."],
["This is", "a"],
["This is", "a test."],
["This is a", "test."],
["is", "a"],
["is", "a test."],
["is a", "test."],
["a", "test."]
];

Он должен работать как можно быстрее, надеюсь, за одно сканирование входной строки.

РЕДАКТИРОВАТЬ:

Вот что я получил, используя рекурсивную функцию:

/**
* @param string $string
* @return string[]
*/
private function split($string)
{
$whitespace = strpos($string, ' ');
if (false === $whitespace) {
return;
}
$segment = substr($string, 0, $whitespace);
$string = substr($string, $whitespace + 1);
$this->link($segment, $string);
$this->split($string);
}

/**
* @param string $segment
* @param string $string
*/
private function link($segment, $string)
{
$this->links[] = [$segment, $string];
}

Тогда я звоню $this->split('this is a test');
и получить:

var_dump($this->links);
Array
(
[0] => Array
(
[0] => This
[1] => is a test.
)

[1] => Array
(
[0] => is
[1] => a test.
)

[2] => Array
(
[0] => a
[1] => test.
)

)

Я собирался обходить массив $ links в обратном направлении при каждом вызове метода link (), но вычислительные затраты для большого документа были бы непомерно высокими.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]