Php 如何在单个字符串中搜索2个或多个匹配项?

Php 如何在单个字符串中搜索2个或多个匹配项?,php,string-comparison,string-matching,Php,String Comparison,String Matching,我想搜索两个或多个单词,但无法匹配确切的单词 如果我使用其他一些函数,比如stripos,我就无法获得所需的输出 $string = "abc india ltd"; $Arr = array('xyz ab','abc india', 'pqr', 'yz lmn'); $Arr = implode('',$Arr); if (preg_match_all("/$string/", $Arr)) { echo '<b>'.'found'.'<font colo

我想搜索两个或多个单词,但无法匹配确切的单词

如果我使用其他一些函数,比如stripos,我就无法获得所需的输出

$string = "abc india ltd";
$Arr = array('xyz ab','abc india', 'pqr', 'yz lmn');
$Arr = implode('',$Arr);
if (preg_match_all("/$string/", $Arr)) {   
     echo '<b>'.'found'.'<font color="green">'.$string.'</font>'.'</b>';          
}
或者两者相同,但要避免在循环内使用

$string = "abc india ltd";
$Arr = array('xyz ab','abc india', 'pqr', 'yz lmn');   
foreach ($Arr as $value) {
    if (preg_match_all("/$string/", $value)) {   
        echo '<b>'.'found '.'<font color="green">'.$string.'</font>'.'</b>';          
    }    
}

我想你想要这样:-

<?php

$string = "abc india";

$Arr = array('xyz india','abc india', 'pqr', 'yz lmn',"xyz abc india");

foreach($Arr as $val){
 $explode_string = explode(" ",$string);
 $counter =0;
 foreach($explode_string as $explode_str){
     if(strpos($val,$explode_str) !== FALSE){
        $counter +=1;
     }
 }
 if($counter>=2){
   echo $val. " have exact ".$counter. " word matches";
   echo PHP_EOL;
 }
}
输出:-


注意:-请使用所有可能的测试用例检查它,并告诉我们是否工作?

这利用了一些智能阵列函数来保持代码块简洁,并避免手动增加计数器:

代码:

输出:

More than one word in abc india was found in abc india ltd
More than one word in ltd abc was found in abc india ltd

*注意,array_intersect生成一个新数组,该数组只包含两个提供的数组中存在的元素。sizeof是count的别名。

请详细说明您实际想要什么。基于此输入数据,您想要的结果是什么。如果数组中有两个确切的单词,我应该找到输出。但是没有一个单词匹配,例如xyz india不应该匹配Yabes Nadar请检查我下面的答案,并用所有可能的案例进行测试,如果它对所有案例都有效,则将其标记并投票作为一个可接受的答案。谢谢你错放了preg_match_all函数的参数。第一个是regex,将$string放入模式中,然后输入$value,第三个是结果数组var。可能还有更多,但这些是最重要的。如果您有$string=abc,india ltd;公认的解决方案行不通。
More than one word in abc india was found in abc india ltd
More than one word in ltd abc was found in abc india ltd