2010-05-02 97 views
0

好吧內搜索,我感覺在這裏遲鈍,字符串數組

我有像這樣的字符串:

$string = 'function module_testing() {'; 

,也可能是這樣的:

$string = 'function module_testing()'; 

或者它可能是這樣的:

$string = 'function module_testing($params) {'; 

或本:

$string = 'function module_testing($params, $another = array())'; 

,還有更多的方式...

而且比我有一個字符串數組,像這樣:

$string_array = array('module_testing', 'another_function', 'and_another_function'); 

現在,有某種preg_match,我可以在任何給定位置測試$string字符串中是否存在任何$string_array值?所以在這種情況下,會有一場比賽。還是有更好的方法來做到這一點?

我不能使用in_array,因爲它不是一個精確匹配,和我寧願不去做就可以了foreach循環,如果我能幫助它,因爲它已經在while循環。

謝謝:)

回答

2

這裏的一個foreach循環是合適的解決方案。它不僅可讀性最強,而且還可以循環使用三個值。發生在while循環內的事實不成問題。

foreach ($string_array as $v) { 
    if (strpos($string, $v) !== false) { 
    // found 
    } 
} 

您也可以使用正則表達式:

$search = '\Q' . implode('\E|\Q', $string_array) . '\E'; 
if (preg_match('!$search!`, $string)) { 
    // found 
} 

有兩個環節進行。首先,存在|語法:

a|b|c 

這意味着找到abc。第二部分是:

\Q...\E 

其中轉義的內容。這意味着如果您的搜索字符串包含任何正則表達式特殊字符(例如(),那麼正則表達式仍然會正常工作。

最終雖然我看不到這比foreach循環更快。

+0

那麼,在這種情況下,它只有3個值,但實際上並不總是如此... – SoLoGHoST 2010-05-02 05:29:51

+0

'stristr',那會有幫助嗎? – SoLoGHoST 2010-05-02 05:30:51

+0

@SoLoG在這種情況下,'strstr()'與使用'strpos()'沒有多大區別。 – cletus 2010-05-02 05:33:14