2017-04-08 1 views
0

Pouvons-nous utiliser l'opérateur Bitwise "|" avec strpos en php? Je dois vérifier si les chaînes a0, a1, a2, a5 existent dans la variable $ status donnée. Mon code est donné ci-dessous. Mon code renverra des valeurs (position) seulement lorsque la variable d'état aura valeur = a0 ou a1 ou a2 ou a5. Elle retournera false quand $ status = 'a1 chaîne de test.Pouvons-nous utiliser l'opérateur Bitwise "|" avec strpos en php?

$status='a1 test string'; 
echo strpos("|a0|a1|a2|a5|", $status); 
+0

La question est: comment se définit ce qui _part_ de cette chaîne d'état que vous voulez réellement rechercher? – arkascha

+0

Je dois rechercher si la chaîne ($ status) contient a1 OU a2 OU a0 OU a5 – user1752065

+0

Et si la chaîne de statut est quelque chose comme "a2 n'est pas la même chose que a5 ou a3!"? – arkascha

Répondre

1

Vous pouvez l'utiliser comme ceci. Ici | moyens or

<?php 
$status='a1 test string'; 

if(preg_match("/\b(a0|a1|a2|a5)\b/", $status)) 
{ 
    echo "Matched"; 
} 
+0

J'ai trouvé ce code dans un projet open source (Open EMR). Ce code est-il correct? $ status = 'a1 chaîne de test'; echo strpos ("| a0 | a1 | a2 | a5 |", $ statut); – user1752065

+0

@ user1752065 Laisser cocher aussi les autres options –

1

Peut-on utiliser l'opérateur Bitwise "|" avec strpos en php?

comme opérateur Bitwise | - Pas

comme symbole littéral | - Oui

+0

Donc, ceci '(strpos ("| a0 | a1 | a2 | a5 |", $ status))' considèrera "| a0 | a1 | a2 | a5 |" comme une seule chaîne r8? – user1752065

+1

Je ne sais pas quel est 'r8' dans votre cas, mais, oui, exactement,' strpos' considère '' | a0 | a1 | a2 | a5 | "' comme une seule chaîne – RomanPerekhrest

1

Non, vous ne pouvez pas. Documentation ne mentionne rien de semblable:

strpos - Trouver la position de la première occurrence d'une sous-chaîne dans une chaîne

Trouver la position numérique de la première occurrence de needle dans la chaîne haystack.

Paramètres

haystack La chaîne de recherche dans.

needle Si l'aiguille est pas une chaîne, il est converti en un entier et appliqué comme valeur ordinale d'un caractère.

offset Si spécifié, la recherche commencera ce nombre de caractères compté depuis le début de la chaîne. Si le décalage est négatif, la recherche lancera ce nombre de caractères comptés à partir de la fin de la chaîne.

En fait, il ne serait pas beaucoup de sens pour mettre en œuvre cette fonctionnalité puisque vous disposez déjà d'un moteur regular expression à part entière:

$has_substrings = (bool)preg_match('/a0|a1|a2|a5/u', $status); 
+0

J'ai trouvé le code ci-dessus dans un projet open source. Donc, cela va consister "| a0 | a1 | a2 | a5 |" comme une seule chaîne r8? – user1752065

+0

@ user1752065 r8? Je n'ai pas la moindre idée de ce dont vous parlez - souvenez-vous que nous ne pouvons pas vous lire mentalement ;-) Si vous avez des questions sur certains logiciels, vous devriez les poser explicitement (et bien sûr fournir un peu de contexte). –

0

Vous ne pouvez pas le faire avec une seule chaîne de recherche. Vous devez utiliser soit une expression régulière qui peut tester plusieurs options à la fois, soit vous devez parcourir vos termes de recherche.

Sahil Gulati a donné un exemple simple pour une approche basée sur l'expression régulière.

Voici une simple itération approche basée sur:

<?php 
$status = 'a1 test string'; 
$search = explode('|', substr("|a0|a1|a2|a5|", 1, -1)); 
// would be much easier to start with an array of search tokens right away: 
// $search = ['a0', 'a1', 'a2', 'a5']; 

$result = false; 
array_walk($search, function($token) use ($status, &$result) { 
    $result = (FALSE!==strpos($status, $token)) ? true : $result; 
}); 
var_dump($result);