我经常发现自己在做这样的事情:
$search = 'some string';
if(strpos($html, $search)!==false){
$trimmed = substr($html, strpos($html, $search));
// whole bunch of other stuff
}
有没有一种方法可以做到这一点,而不需要调用strpos()
两次?目前,我首先调用它进行if()
检查,然后再次调用它进行执行。这显然是低效的。
即使我尝试使用三元运算符,当我将其指定为真值时,我仍然会调用strpos()
两次。
$trimmed = strpos($html, $search)!==false ? substr($html, strpos($html, $search)) : false;
if($trimmed!==false){
// the other stuff
}
保持if语句结果的最佳方法是什么,这样就不需要在其内部再次调用它了?
$pos = strpos($html, $search);
if ($pos !== false) {
$trimmed = substr($html, $pos);
}
或
if (($pos = strpos($html, $search)) !== false) {
$trimmed = substr($html, $pos);
}
在三进制中,您正在调用strpos()
的值,如果它不是false,则再次调用strpos()
并将其存储在trimmed
中,否则,如果它是false
,则将其设置为false
。
您关心无缘无故地打两次strpos()
,因为:
strpos($html, $search) == (strpos($html, $search)!==false ? substr($html, strpos($html, $search)) : false;)
只需将函数调用的值存储在一个变量中并进行检查:
$trimmed = strpos($html, $search)
if($trimmed!==false){
// the other stuff
}