写这个的最短方法是什么?
if(strpos($haystack, $needle)!==false){
$len = strpos($haystack, $needle)+strlen($needle);
}else{
$len = 0;
}
我记得我在某处看到了一些快捷方式,它同时检查并设置了一个变量。
$len = 0;
if(($pos = strpos($haystack, $needle)) !== false) {
$len = $pos + strlen($needle);
}
我建议不要使用三元?:
运算符,即使它更短。
$len = strpos($haystack, $needle);
$len = ($len !== false) ? $len + strlen($needle) : 0;
$len=strpos($haystack, $needle);
if($len !== FALSE) {
$len += strlen($needle);
}
而且,在我看来,三元运算符对可读性的影响是可怕的。
它被称为三元运算符,可以这样使用:
$len = strpos($haystack, $needle) ? strpos($haystack, $needle)+strlen($needle) : 0;
但是,您应该小心使用它,因为它会使某些表达式很难阅读。
$len = strpos($haystack, $needle) ? strpos($haystack, $needle)+strlen($needle) : 0;
另请参阅三元运算。
另一种方法:
$len = strlen(preg_replace('/(.*?'.preg_quote($needle,'/').')?.*/', '$1', $haystack));
可能更慢且更占用内存,但它确实需要更少的输入。所以它是否真的是一个捷径取决于定义。如果您对三元运算符和评估条件下的赋值过敏,它确实提供了一个有效的选项。
你也可以做
$len = preg_match('/'.preg_quote($needle,'/').'()/', $haystack, $m, PREG_OFFSET_CAPTURE)? $m[1][1] : 0
尽管再次使用 preg_ 函数搜索固定字符串有点浪费资源。