我有这段代码。
$needles = explode(" ", $textContentArray);
$haystack = $textContent;
$match_found = strposa($haystack,$needles);
if($match_found) {
echo $match_found ;
}
else {
echo "No match found.";
}
function strposa($haystack, $needles) {
$chr = array();
foreach($needles as $needle) {
$res = stripos($haystack, $needle);
if ($res !== false)
{
$chr[$needle] = $res;
$string_exist = $needle; break;
}
}
if(empty($chr)) return false;
return $string_exist;
}
目前这会输出它找到的第一个匹配,但是,我希望它输出每个匹配而不仅仅是第一个匹配。这是因为我在一个网站上使用它,它将显示2个网址之间的任何字符串匹配。
谢谢。
答案 0 :(得分:0)
只需在函数中返回匹配
if(empty($chr)) return false;
return $chr;
}
并删除break
所以$match_found
将是数组,例如["foo" => 1, "bar" => 4, ...]
答案 1 :(得分:-1)
$textContentArray = preg_replace('/(\{|\}|\[|\]|\(|\)|\||\^|\$)/', '\\\$1', $textContentArray);
$needles = array_map('trim',array_filter(explode(' ',$textContentArray)));
preg_match_all('#('.implode('|',$needles).')#is', $haystack, $result);
if(isset($result[1])){
echo '<pre>';
print_r($result);
echo '</pre>';
}else{
echo 'not found';
};