2014-02-12 117 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()有最佳的表现效果。

相关问题