2013-10-02 53 views
3

有沒有簡單的方法來檢查一個值是否在一個字符串內?檢查值是否在以逗號分隔值的字符串內部?

$string = ' 123,456,789,abc789,def' 
if ($string has '789') { 
    // code 
} 

我只想要精確匹配(所以只有789,而不是abc789)

我能想到此刻做的唯一方法是用逗號將其爆炸串入一個數組,然後檢查每個值是否匹配。有更好/更有效的方法嗎?

回答

5

使用strpos例如,如果你有' 123,456,789,12789,abc,def'將無法​​工作,尋找12,這將不會返回true,用preg_match代替:

$string = ' 123,456,789,abc789,def'; 
$what_to_find = '789'; 
if (preg_match('/\b' . $what_to_find . '\b/', $string)) { 
    // code 
} 

Demo

+0

不會爆炸+檢查數組是否比preg_match更有效? – user2413333

+0

不,正則表達式對字符串非常非常非常非常有效。 – OneOfOne

+0

它比爆炸到陣列簡單,所以謝謝你的解決方案:) – user2413333

1

您可以使用strpos()函數。它將返回FALSE如果針沒有在搜索字符串發現:

if (strpos($string, '789') !== FALSE) { 
    // code... 
} 

Demo!


如果你想完全匹配,那麼我會使用explode()

$parts = explode(',', trim($string)); 
if (in_array('789', $parts)) { 
    // code... 
} 

Demo!

+0

@Sbml:見我的答案的第一部分。它使用'strpos()':) –

+0

對不起,這兩個選項都區分大小寫。對於不區分大小寫的情況,您可以添加stripos()函數:if(stripos($ string,「ABC」))echo「Found!」; – Sbml

+0

@Sbml:是的,但沒關係。搜索字符串是「789」。 –

0

使用strpos()功能。

$string = ' 123,456,789,abc,def' 
if (strpos($string,'789') !== FALSE) { 
    // code 
} 
0

你可以用它來找到一個字符串內其他

$string = ' 123,456,789,abc,def'; 

if (strpos($string,'789') !== false) { 
     echo 'true'; 
    } 

的發生strpos功能見Manual

2

你可能會爆炸,並檢查其陣列

function stringContains($string, $needle) 
{ 
    $arr = explode(',',$string); 
    if(in_array($needle,$arr)) 
     return true; 

    return false; 
} 

除了建議的建議離子,如果你在一個字符串123456哪裏strpos將返回一個位置

+0

最新的投票是什麼? – Bryan

+0

我認爲這可能是最好的方法,因爲我需要它是完全匹配,謝謝。 – user2413333

+0

是啊,並在數組做檢查你,所以你不必手動檢查每個數組元素的匹配 – Bryan

0

的@布賴恩的代碼較短的版本:

function stringContains($string, $needle) { 
    return in_array($needle, explode(',', $string)); 
} 
相關問題