2014-01-27 84 views
1

我想搜索一個數組中的單詞(區域)列表。在PHP中的部分匹配in_array()

但有時候數組中的單詞(區域)是2個單詞。

即在陣列中是「米爾頓凱恩斯」,所以「米爾頓」沒有被匹配

有什麼辦法,我可以做到這一點,而不會在陣列中分裂任何雙字(我認爲這將是一個在服務器上的負載很大)

下面是我在做什麼

foreach (preg_split("/(\s)|(\/)|(\W)/", $words) as $word){     
    if (in_array($word, $areaArray)){ 
     $AreaID[] = array_search($word, $areaArray); 
    } 
} 

感謝一如既往的任何建議的例子!

+0

'in_array'僅適用於完全匹配。你必須遍歷你的數組並且自己尋找那些部分匹配。 – CBroe

+0

準備你的單詞列表以使用替代品'Milton | Keys | ...'並使用['preg_grep'](http://php.net/preg_grep)。 – mario

回答

0

您可以使用正則表達式找到一個值,這將工作類似於MySQL的類似功能

$search='Milton Keynes'; 
foreach ($areaArray as $key => $value) { 
if (preg_match('~'.preg_quote($search).'~i',$value)) { 
    echo "$key"; 
} 
} 
+1

我會在'preg_quote()'中添加以確保模式在包含某些「特殊」字符時不會中斷。 –

+0

還有一個語法錯誤。 'search'應該是'$ search'。另外,爲什麼你在那裏使用額外的引號? –

+0

@AmalMurali謝謝,修正,是一個排字錯誤 –

0

你可以使用preg_grep()

$re = sprintf('/\b%s\b/', preg_quote($search, '/')); 
// ... 
if (preg_grep($re, $areaArray)) { 
    // we have a match 
} 

您可以選擇進行匹配不區分大小寫通過添加/i修改器。

+0

這將用於完全匹配沒有大小寫敏感 –

+0

@EmilioGort不知道你的意思是什麼。你是說它不起作用? –

+0

它的工作原理...向正確解釋正則表達式中的邊界 –