2017-04-08 4 views
0

Können wir den Bitweisen Operator "|" verwenden? mit strpos in php? Ich muss überprüfen, ob a0, a1, a2, a5 Zeichenfolgen in der angegebenen Variablen $ status vorhanden sind. Mein Code wird unten angegeben. Mein Code gibt Werte (Position) nur dann zurück, wenn die Statusvariable Wert = a0 oder a1 oder a2 oder a5 hat. Es wird false zurückgegeben, wenn $ status = 'a1 test string.Können wir den Bitweisen Operator "|" verwenden? mit strpos in php?

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

Frage ist: Wie definiert ist, was _part_ dieses Status Zeichenfolge, die Sie eigentlich suchen? – arkascha

+0

Ich muss suchen, wenn die Zeichenfolge ($ status) enthält a1 OR a2 ODER a0 ODER a5 – user1752065

+0

Und wenn die Statuszeichenfolge ist so etwas wie "a2 ist nicht das Gleiche wie a5 oder a3!"? – arkascha

Antwort

1

Sie können es so verwenden. Hier | Mittel or

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

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

Ich habe diesen Code in einem Open-Source-Projekt (Open EMR) gefunden. Ist dieser Code korrekt? $ status = 'a1 Testzeichenfolge'; echo strpos ("| a0 | a1 | a2 | a5 |", $ status); – user1752065

+0

@ user1752065 Lassen Sie auch nach anderen Optionen suchen –

1

Können wir bitweise Operator "|" mit strpos in php?

als bitweise Operator | - Kein

als wörtliche Symbol | - Ja

+0

Also '(strpos ("| a0 | a1 | a2 | a5 |", $ status))' wird berücksichtigt "| a0 | a1 | a2 | a5 |" als eine einzige Zeichenfolge r8? – user1752065

+1

Ich weiß nicht, was 'r8' in Ihrem Fall ist, aber, genau,' strpos' betrachtet '" | a0 | a1 | a2 | a5 | "' als eine einzige Zeichenfolge – RomanPerekhrest

1

Nein, können Sie nicht. Documentation erwähnt nicht nur im Entferntesten ähnlich:

strpos - Finden Sie die Position des ersten Auftretens eines Teil in ein String

finden die numerische Position des ersten Auftretens von needle in dem haystack String.

Parameter

haystack Die Zeichenfolge in suchen.

needle Wenn Nadel kein String ist, wird sie in eine Ganzzahl umgewandelt und als der Ordnungswert eines Zeichens entspricht.

offset Falls angegeben, beginnt die Suche mit der Anzahl der Zeichen , gezählt vom Anfang der Zeichenfolge. Wenn der Offset negativ ist, startet die Suche die Anzahl der Zeichen, die vom Ende der Zeichenfolge gezählt werden.

In der Tat wäre es nicht viel Sinn, eine solche Funktion zu implementieren, da Sie bereits ein vollwertiges regular expression Motor haben:

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

Ich fand den obigen Code in einem Open-Source-Projekt. Das heißt also "| a0 | a1 | a2 | a5 |" als eine einzige Zeichenfolge r8? – user1752065

+0

@ user1752065 r8? Ich habe nicht die geringste Ahnung von dem, worüber du redest - denk daran, dass wir dich nicht lesen können ;-) Wenn du Fragen zu einer bestimmten Software hast, solltest du sie explizit fragen (und natürlich einen Kontext bereitstellen). –

0

Sie nicht, dass mit einem einzigen String-Suche tun. Sie müssen entweder einen regulären Ausdruck verwenden, der mehrere Optionen gleichzeitig testen kann, oder Sie müssen über Ihre Suchbegriffe iterieren.

Sahil Gulati gab ein einfaches Beispiel für einen auf regulären Ausdrücken basierenden Ansatz.

Hier ist eine einfache Iteration basierten Ansatz:

<?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); 
Verwandte Themen