Вот такой код, который последовательно перебирает варианты значений массива, результат преобразуется в строку, затем количество перебираемых элементов уменьшается, а позиция сдвигается на 1.
$arr = array('привет', 'как', 'у', 'тебя', 'дела');
$cnt = count($arr);
$b = 'привет как';
$c = 'тебя';
for ($j=0;$j<($cnt);$j++){
for ($i=$cnt-$j; $i>0; $i--){
$output = array_slice($arr, $j, $i, true);
$string = implode(" ",$output);
if ($string == $b){
echo $string."<br /> ";
}
}
}
Для наглядности результаты переборки если убрать условие if
привет как у тебя дела
привет как у тебя
привет как у
привет как
привет
как у тебя дела
как у тебя
как у
как
у тебя дела
у тебя
у
тебя дела
тебя
дела
То есть сначала полная строка, затем в сторону уменьшения до первого элемента. Затем переборка со второго элемента по такой же схеме вплоть до последнего.
В коде также присутствуют две переменные $b $c у которых есть совпадающие значения с элементами массива.
Сотбственно вопрос. Как при нахождении совпадения, то есть, допустим найдено совпадение с 0 позиции 2 элемента (0 и 1), в дальнейшей переборке исключить эти элементы, и продолжать уже с позиции 2. То есть если найдено совпадение "привет как" продолжать с "у тебя дела", если "привет как у тебя" - то остается "дела".