2017-04-08 139 views
0

我們可以使用位運算符「|」在PHP中strpos? 我需要檢查在給定的$ status變量中是否存在字符串a0,a1,a2,a5。 我的代碼給出bellow.My代碼將返回值(位置)只有當狀態變量有值= a0或a1或a2或a5。它將返回false時,狀態='a1測試字符串。我們可以使用位運算符「|」在PHP中strpos?

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

問題是:如何定義什麼_part_你真的想搜索該狀態字符串的? – arkascha

+0

我需要搜索字符串($狀態)是否包含a1或a2或a0或a5 – user1752065

+0

而且如果狀態字符串是類似「a2不同於a5或a3!」? – arkascha

回答

1

你可以這樣使用它。這裏|意味着or

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

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

我在一個開源項目(Open EMR)中找到了這段代碼。這段代碼是正確的嗎? $ status ='a1 test string'; echo strpos(「| a0 | a1 | a2 | a5 |」,$ status); – user1752065

+0

@ user1752065讓我們檢查其他選項 –

1

我們可以使用位運算符 「|」在PHP中strpos?

爲位運算符| - 沒有

爲一個文字符號| -

+0

所以這'(strpos(「| a0 | a1 | a2 | a5 |」,$ status))'會考慮「| a0 | a1 | a2 | a5 |」作爲單個字符串r8? – user1752065

+1

我不知道你的情況下是什麼'r8',但是,是的,'strpos'認爲'「| a0 | a1 | a2 | a5 |」'作爲單個字符串 – RomanPerekhrest

1

不,你不能。 Documentation沒有提到任何遠程類似:

strpos - 查找 字符串

一個字符串的第一個出現的位置找到needlehaystack字符串中第一次出現的數字位置。

參數

haystack的字符串中搜索。

needle如果針不是字符串,它被轉換爲一個整數,並施加作爲字符的順序值 。

offset如果指定,則搜索將開始從字符串的開頭開始計算的這個數字字符 。如果偏移量爲負數,則 搜索將開始從字符串的末尾 開始計算的這個字符數。

事實上,它不會使實現這種功能太大的意義,因爲你已經有了一個全面的regular expression引擎:

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

我發現上面的代碼在開源項目。所以這會考慮「| a0 | a1 | a2 | a5 |」作爲單個字符串r8? – user1752065

+0

@ user1752065 r8?我不知道你在說什麼 - 記住我們無法讀懂你的想法;-)如果你對某些軟件有疑問,你應該明確地詢問它們(當然還要提供一些上下文)。 –

0

你不能做到這一點與一個字符串搜索。您需要使用可以一次測試多個選項的正則表達式,或者需要遍歷搜索條件。

Sahil Gulati給出了一個基於正則表達式的方法的簡單例子。

下面是一個簡單的迭代爲基礎的方法:

<?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); 
相關問題