如何檢查給定值的開始是否與預定義值列表中的條目匹配?PHP檢查數組是否包含字符串開始
$model_no1 = "KK71458";
$model_no2 = "IX41";
$models = array("KK61", "KK71", "KK81", "IX", "IJ");
在上面的示例代碼中,兩個值都應返回有效的匹配。
如何檢查給定值的開始是否與預定義值列表中的條目匹配?PHP檢查數組是否包含字符串開始
$model_no1 = "KK71458";
$model_no2 = "IX41";
$models = array("KK61", "KK71", "KK81", "IX", "IJ");
在上面的示例代碼中,兩個值都應返回有效的匹配。
試試這個:
$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;
}
}
$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'));
我會建議使用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()
有最佳的表現效果。
你的輸入是什麼(x個字符串,一個字符串)? 你的輸出應該如何顯示? –
你想要處理多大的數組和字符串?對於大數組/字符串來說,天真的解決方案對於它來說效率非常低。 – Dogbert
只有一個字符串。該數組將包含不超過一百個與上述類似的條目。 – GSTAR