Php 如何在主字符串中查找多个逗号分隔的字符串

Php 如何在主字符串中查找多个逗号分隔的字符串,php,string,Php,String,我有这个主要的刺 S,SR,DSR,DS,FX,FXS,SR,DS,S,SR,DS,FX,S,SR,DS,FX,FXS 我想找到以下每个字符串 DSR和FXS 我尝试了以下代码,但它不能给我完美的结果 代码 <?php $mainstring ="S,SR,DSR,DS,FX,FXS,SR,DS,S,SR,DS,FX,S,SR,DS,FX,FXS"; $needed = "DSR,FXS"; if( strpos( $mainstring, $needed )

我有这个主要的刺

S,SR,DSR,DS,FX,FXS,SR,DS,S,SR,DS,FX,S,SR,DS,FX,FXS
我想找到以下每个字符串

DSR
FXS

我尝试了以下代码,但它不能给我完美的结果

代码

<?php
    $mainstring ="S,SR,DSR,DS,FX,FXS,SR,DS,S,SR,DS,FX,S,SR,DS,FX,FXS";
    $needed = "DSR,FXS";

    if( strpos( $mainstring, $needed ) !== false ) {
        echo "Found";
    }else{
        echo "Not match";
    }
?>

一种解决方案是用逗号分解这些字符串,并验证生成的数组交集计数是否与搜索结果相同:

$mainstring ="S,SR,DSR,DS,FX,FXS,SR,DS,S,SR,DS,FX,S,SR,DS,FX,FXS";
$needed = "DSR,FXS";

$mainStringArr = explode(',', $mainstring);
$neededArr = explode(',', $needed);

if (count(array_unique(array_intersect($mainStringArr, $neededArr))) == count($neededArr)) {
    echo 'found';
} else {
    echo 'not found';
}

通过命令分解
$needed
字符串,使用
strops()
函数遍历数组,并将数组的每个值比较为
$mainstring
。如果找到,则将该值放入带有“已找到”或“未找到”值的
$arrResult
,最后打印
$arrResult
,以查看需要的$值和未找到的值

此外,如果找到值,我们将增加变量
$cntRequired
。在
foreach
循环结束时,比较
$cntRequired
$arrRequired
的值是否相同,然后在
$mainstring
中找到所有值,否则不存在

$mainstring ="S,SR,DSR,DS,FX,FXS,SR,DS,S,SR,DS,FX,S,SR,DS,FX,FXS";
$needed = "DSR,FXS";
$arrNeeded = explode(",", $needed);

$arrResult = array();
$cntNeeded = 0;
foreach($arrNeeded as $index => $needed) {
  if( strpos( $mainstring, $needed ) !== false ) {
    $arrResult[$needed] = "Found";
    $cntNeeded++;
  }
  else{
    $arrResult[$needed] = "Not match";
  }
}

print("<pre> :: arrResult ::");
print_r($arrResult);
print("</pre>");

if($cntNeeded == count($arrNeeded)) {
  echo "Found";
}
else {
  echo "Not match";
}
$mainstring=“S,SR,DSR,DS,FX,FXS,SR,DS,DS,FX,S,SR,DS,FX,S,SR,DS,FX,FXS”;
$needed=“DSR,FXS”;
$ArrRequired=爆炸(“,”,$Required);
$arrResult=array();
$CNT=0;
foreach($arrRequired as$index=>$Required){
if(strpos($mainstring,$needed)!==false){
$arresult[$needed]=“Found”;
$CNT++;
}
否则{
$arresult[$needed]=“不匹配”;
}
}
打印(“::结果:”);
打印(结果);
打印(“”);
如果($cntRequired==计数($arrRequired)){
回声“发现”;
}
否则{
回声“不匹配”;
}

“DSR,FXS”不在您的字符串中…如果(strpos($mainstring,$needed)!==false)不是最聪明的方法,因为如果$mainstring以$needed开头,strpos将返回0,这是==false。不,“DSR”可用,“FXS”可用,但“DSR,FXS”不可用。它们可以单独使用,但顺序不正确,strpos查找
DSR、FXS
而不是
DSR
,然后查找
FXS
@kosta,仅供参考,该
==
===
(三重相等)检查值的类型以及值。因此0(int-zero)与false(boolean)不同。为什么OP“尝试下面的代码”?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。