strpos存储所有结果不是第一个积极的

时间:2017-04-30 11:50:03

标签: php strpos

我有这段代码。

$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个网址之间的任何字符串匹配。

谢谢。

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';
};