preg_match_all多字搜索

时间:2015-11-04 12:57:58

标签: php search preg-match preg-match-all

基本上我正在尝试使用preg_match_all来执行多搜索。 我有3个阵列:

  • $searchWordBis,其中包含要搜索的字词。
  • $linkArray,其中包含字符串,即我要搜索的数组。
  • $matches,其中包含研究结果。

我希望在$ linkArray中搜索$ searchWordBis的每个单词。

这是我写的:

for ($i = 0; $i <= count($searchWordBis)-1 ; $i++) { //loop test to do the search for each word of $searchWordBis and that way opperate a multi-words search

    $fct = function($var) use ($searchWordBis) { //$fct is a "closure" (anonymous function)
        return preg_match_all("/\b$searchWordBis[$i]\b/i", $var, $pregMatches);
    };
    $matches = array_values(array_filter($linkArray, $fct));    //filtering $matches array according to $fct + reseting index

    /* Tests */
    echo $searchWordBis[$i];
    echo '<br>';

    echo '<pre>';
    var_dump($pregMatches);
    echo '</pre>';

    echo '<pre>';
    var_dump($matches);
    echo '</pre>';
    /* ----- */
}

但它不起作用。我的代码有什么问题?感谢

2 个答案:

答案 0 :(得分:0)

试试这个:

for ($i = 0; $i <= count($searchWordBis)-1 ; $i++) {
    $fct = function($var) use ($searchWordBis, $i) {
        return preg_match_all("/\b{$searchWordBis[$i]}\b/i", $var, $pregMatches);
    };
    $matches = array_values(array_filter($linkArray, $fct));
    ...
在闭包中,在use子句中包含$i,并将数组括在花括号中。或者您也可以使用foreach代替for来避免计数器

foreach ($searchWordBis as $pattern) {
    $fct = function($var) use ( $pattern) {
        return preg_match_all("/\b$pattern\b/i", $var, $pregMatches);
    };
    $matches = array_values(array_filter($linkArray, $fct));
    ...

答案 1 :(得分:0)

我认为使用preg_grep更简单

$('#date_time_'+index+'_id').datetimepicker({
  pickDate: false
});

如果您想要每个单词的结果:

$pattern = '~\b(?:' . implode('|', $searchWordBis) . ')\b~S';

$result = preg_grep($pattern, $linkArray);