Разбить строку на массив (PHP) - PullRequest
0 голосов
/ 12 июля 2019

Я хотел взорвать струну в таком виде из

с учетом строкового значения $string = "Hello World Hey;

Функция разнесения будет немедленным вызовом, если вы хотите иметь вывод массива строк ["Hello","World","Hey"]

Однако я хочу достичь такого результата ["Hello","World","Hey","Hello World","World Hey"]

Есть идеи, как это решить?

Ответы [ 3 ]

2 голосов
/ 12 июля 2019

Если ваша цель - получить отдельные части, а также совпадающие совпадения для текущего и следующего слова, альтернативным решением может быть использование выражения.

Вы можете зафиксировать перекрывающиеся совпадения в группе, используя положительный прогноз, а также захватить отдельные «слова», сопоставив 1+ раз непробельный символ и используя группу сброса ветви (?|

$string = "Hello World Hey";
$res = preg_match_all("/(?|(?:^|\h)(?=(\S+ \S+))|(\S+))/", $string, $matches);
print_r($matches[1]);

Результат

Array
(
    [0] => Hello World
    [1] => Hello
    [2] => World Hey
    [3] => World
    [4] => Hey
)

Демонстрационная модель | Php demo

Если вам нужны текущее и 2 следующих слова, вы можете использовать группу и квантификатор {2}

Php демо

1 голос
/ 12 июля 2019
<?php

$str = "Hello World Hey";
$arr = explode(" ", $str);
$res_arr = $arr;

for($i = 0; $i < count($arr); $i++)
{
    if($i > 0)
    {
        $res_arr[] = $arr[$i - 1]." ".$arr[$i];
    }
}

print_r($res_arr);

Результат:

Array
(
    [0] => Hello
    [1] => World
    [2] => Hey
    [3] => Hello World
    [4] => World Hey
)
0 голосов
/ 12 июля 2019
function str_arr($str) {

    $arr = explode(' ', $str);

    $len = count($arr);
    for($i=0; $i<$len-1; $i++)
        $arr[] = $arr[$i] . ' ' . $arr[$i+1];

    return $arr;
}

для ввода «Hello World Hey» выше функция возвращает этот массив

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