2014-02-12 74 views
1

如何檢查給定值的開始是否與預定義值列表中的條目匹配?PHP檢查數組是否包含字符串開始

$model_no1 = "KK71458"; 
$model_no2 = "IX41"; 

$models = array("KK61", "KK71", "KK81", "IX", "IJ"); 

在上面的示例代碼中,兩個值都應返回有效的匹配。

+0

你的輸入是什麼(x個字符串,一個字符串)? 你的輸出應該如何顯示? –

+0

你想要處理多大的數組和字符串?對於大數組/字符串來說,天真的解決方案對於它來說效率非常低。 – Dogbert

+0

只有一個字符串。該數組將包含不超過一百個與上述類似的條目。 – GSTAR

回答

1

試試這個:

$model_no1 = "KK71458"; 
    $models = array("KK61", "KK71", "KK81", "IX", "IJ"); 
    foreach($models as $key=> $mod){ 
     if($mod == substr($model_no1,0,strlen($mod))){ 
      echo "key: ".$key.' with value: '.$mod; 
     } 
    } 
0
$models = array("KK61", "KK71", "KK81", "IX", "IJ"); 

$g = function($search) use ($models) { 
    return array_filter($models, function($string) use($search) { 
     return substr($search, 0, strlen($string)) == $string; 
    }); 
}; 

print_r($g->__invoke('KK71458')); 
print_r($g->__invoke('IX41')); 
print_r($g->__invoke('SPONGEBOB')); 
0

我會建議使用strpos()函數,而不是組合的substr()strlen()你的情況:

$model_no1 = 'KK71458'; 
$model_no2 = 'IX41'; 

$models = array('KK61', 'KK71', 'KK81', 'IX', 'IJ'); 
$result1 = check_model($model_no1, $models); 
$result2 = check_model($model_no2, $models); 

function check_model($model_no, array $models) { 
    foreach ($models as $needle) { 
     if (0 === strpos($model_no, $needle)) 
      return true; 
    } 

    return false; 
} 

我寫的簡單test檢查字符串比較性能通過strpos(),strstr()substr()+strlen()。下面是結果:

Test name  Repeats   Result   Performance  
strpos   10000   0.167221 sec +0.00% 
strstr   10000   0.169299 sec -1.24% 
substr+strlen 10000   0.207363 sec -24.01% 

正如你看到的strpos()有最佳的表現效果。

相關問題