2014-02-10 46 views
1

我有一個字符串:字符串comparsion有不同的變體

$string = 'michelinx-icexi3xl92t'; 

OR

$string = 'michelinx-icexi2xl92t'; 

和陣列

$array = array(0 => 'x-ice', 1 => 'x-icenorth', 2 => 'x-icexi2', 3 => 'x-icexi3'); 

我在做什麼是:

foreach($array as $key => $arr) 
{ 
    if(strstr($string, $arr)){ 
     //some code here 
     break; 
    } 
} 

在這兩種情況下,當$ key == 0; 但我需要停止它時,$ key == 3或2或可能是另一個鍵,這更好地匹配字符串

任何建議如何做到這一點?

+2

它停止,因爲它得到非常相配第一陣列。你有什麼標準讓它在'$ key == 3'上停下來? – Rikesh

+0

這就是問題+) 問題是 - 如何更改此代碼 – aloneibreak

+0

之前打破如果語句檢查值'$ key == 3' – krishna

回答

0

你可以試試這個代碼,找出更好地匹配字符串

$string = 'michelinx-icexi3xl92t'; 
$array = array(0 => 'x-ice', 1 => 'x-icenorth', 2 => 'x-icexi2', 3 => 'x-icexi3'); 
$matchedStr = ""; 
foreach($array as $key => $val) { 
    if(strstr($string, $val) && strlen($val) > strlen($matchedStr)) { 
     //some code here 
     $matchedStr = $val; 
    } 
} 
echo "matched string is: " . $matchedStr; 

OUTPUT:

matched string is: x-icexi3 
0

試試這個

foreach($array as $key => $arr) 
{ 
    if(strstr($string, $arr)){ 
     //some code here 


     if($key == 3) 
     break; 
    } 
} 
+1

沒有)想象一下$ array有另一個鍵?如果在下次調用這段代碼時字符串是michelinx-icexi3xl92t – aloneibreak

0

試試這個:

foreach($array as $key => $arr) 
    { 
     if(strstr($string, $arr)){ 
      //some code here 
      break; 
     } 

     if($key == 3) break; 

    } 
0

如果要循環整個數組,請刪除中斷。

3

找到第一個匹配的字符串後,您的當前代碼停止。從問題來看,您的要求似乎是找到匹配的字符串最長的。因此,如果您安排最長的字符串始終顯示在第一位,則可以不加修改地使用現有的代碼。

因此,這裏是如何使用自定義排序來排序字符串長度遞減字符串數組:

$array= array(0 => 'x-ice', 1 => 'x-icenorth', 2 => 'x-icexi2', 3 => 'x-icexi3'); 
usort($array, function($a, $b) { return strlen($b) - strlen($a); }); 

這種方法還有一個好處,你不花時間尋找,你會結果以後扔掉(一旦你找到第一場比賽,你已經知道它也是最好的),所以在大多數情況下它會跑得更快。

然而,你的代碼也有必須解決的一個錯誤:在你無法測試返回值strstr像一般的情況下(如果搜索"0"它會失敗)。這也將是更快地使用strpos代替,就像這樣:

if(strpos($arr, $string) !== false){ 
    //some code here 
    break; 
} 
0

最好的解決辦法是,降序排列你的陣列串即長度

$array = array(0 => 'x-ice', 1 => 'x-icenorth', 2 => 'x-icexi2', 3 => 'x-icexi3'); 

將成爲

$array = array(0 => 'x-icenorth', 1 => 'x-icexi2', 2 => 'x-icexi3', 3 => 'x-ice'); 

然後執行:

foreach($array as $key => $arr) 
{ 
    if(strstr($string, $arr)){ 
     //some code here 
     break; 
    } 
} 
0

我知道你要查找的陣列中最匹配的字符串。要做到這一點,你可以簡單地這樣做:

$most_matched_pos = 0; 
$most_matched_len = 0; 
foreach($array as $key => $val) { 
    $cur = strlen(strstr($string, $val)); 
    if($cur > $most_matched_len) { 
     $most_matched_len = $cur; 
     $most_matched_pos = $key; 
    } 
} 

echo "The most matched is {$array[$most_matched_pos]} "; 

你的榜樣,你有這樣的輸出:

最匹配的是X-icexi3

相關問題