基本上我正在尝试使用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>';
/* ----- */
}
但它不起作用。我的代码有什么问题?感谢
答案 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);