在单词之前和之后提取字符串的一部分

Vah*_*hid 2 php regex string search

我需要提取和显示一些单词之前之后一个查询词,像谷歌的搜索结果,例如:

$str = "hi user! welcome to new php open source world, we are trying to learn you something!";
$query = "new php";
$result = "... welcome to new php open source ...";
Run Code Online (Sandbox Code Playgroud)

我搜索谷歌一个SO但没有找到一个明确的答案或者也许我的PHP知识还不够!是否有一个可行且易于使用的功能来完成这项工作?

Can*_*ral 5

function yourFuncName($str, $query, $numOfWordToAdd) {
    list($before, $after) = explode($query, $str);

    $before = rtrim($before);
    $after  = ltrim($after);

    $beforeArray = array_reverse(explode(" ", $before));
    $afterArray  = explode(" ", $after);

    $countBeforeArray = count($beforeArray);
    $countAfterArray  = count($afterArray);

    $beforeString = "";
    if($countBeforeArray < $numOfWordToAdd) {
        $beforeString = implode(' ', $beforeArray);
    }
    else {
        for($i = 0; $i < $numOfWordToAdd; $i++) {
            $beforeString = $beforeArray[$i] . ' ' . $beforeString; 
        }
    }

    $afterString = "";
    if($countAfterArray < $numOfWordToAdd) {
        $afterString = implode(' ', $afterArray);
    }
    else {
        for($i = 0; $i < $numOfWordToAdd; $i++) {
            $afterString = $afterString . $afterArray[$i] . ' '; 
        }
    }

    $string = $beforeString . $query . ' ' . $afterString;

    return $string;
}
Run Code Online (Sandbox Code Playgroud)

输出为: user! welcome to new php open source world,($ numOfWordToAdd = 3)