我经常发现自己在做这样的事情:
$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语句结果的最佳方法是什么,以便不需要再次调用它?
答案 0 :(得分:4)
$pos = strpos($html, $search);
if ($pos !== false) {
$trimmed = substr($html, $pos);
}
或
if (($pos = strpos($html, $search)) !== false) {
$trimmed = substr($html, $pos);
}
答案 1 :(得分:2)
在您的三元组中,您调用strpos()
的值,如果它不是假的话,请再次拨打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
}