2016-10-27 1 views
-1

J'ai cette piqûre principale.comment trouver plusieurs chaînes séparées par des virgules dans la chaîne principale

S,SR,DSR,DS,FX,FXS,SR,DS,S,SR,DS,FX,S,SR,DS,FX,FXS 

et je veux trouver chacune des chaînes suivantes ..

DSR et FXS

j'ai essayé par le code suivant, mais il ne peut pas me donner un résultat parfait.

Code

...

<?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"; 
    } 
?> 
+5

"DSR, FXS" n'est pas dans votre chaîne ... –

+0

if (strpos (mainstring de $, $ nécessaire)! == false) n'est pas la façon la plus intelligente, parce que si mainstring $ commence avec $ nécessaire, strpos renverra 0, ce qui est == false. – kosta

+0

"DSR, FXS" est disponible dans la chaîne principale regardez "S, SR, DSR, DS, FX, FX, SR, DS, S, SR, DS, FX, S, SR, DS, FX, FXS". – maddy

Répondre

5

Une solution serait de faire exploser les cordes par une virgule et de vérifier si le nombre d'intersection des tableaux résultat est le même que votre recherche:

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

Explode le $needed chaîne par commande et traverse le tableau pour comparer chaque valeur de tableau en $mainstring en utilisant la fonction strpos(). Si trouvé, alors mettez cette valeur dans $arrResut avec la valeur 'Found' ou 'not found' et enfin imprimez le $arrResult pour voir quelle valeur de $ needed est trouvée et laquelle ne l'est pas.

De plus, nous incrémentons $cntNeeded variable si valeur si trouvé. à la fin de foreach boucle comparer la valeur de $cntNeeded & $arrNeeded sont les mêmes, puis toutes les valeurs sont trouvées dans $mainstring sinon pas.

$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"; 
} 
+1

Pourquoi l'OP "essaie-t-il le code ci-dessous"? Une *** bonne réponse *** aura toujours une explication de ce qui a été fait et pourquoi cela a été fait d'une telle manière, non seulement pour le PO mais pour les futurs visiteurs de SO. –