如何检查给定值的开始是否与预定义值列表中的条目匹配?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