幫忙看下怎麼會返回null
本帖最後由 snowlove 於 2013-06-17 18:27:34 編輯
function newtripos($str,$findstr,$count,$off=0){
$pos=stripos($str,$findstr,$off);
$count--;
if($count>0 && $pos!=false){
$pos=newtripos($str,$findstr,$count,$pos+1);
}else{
var_dump($pos);
return $pos;
}
}
$a="456123456455654466";
$b=newtripos($a,'6',4);
var_dump($b);
?>
執行後顯示$b是null。而在函數返回前,執行的var_dump($pos),顯示是int(16)。
為什麼var_dump($b)會是null?
分享到:
------解決方案--------------------
你使用了遞迴,return $pos; 在進入遞迴後會作用於 $pos=newtripos($str,$findstr,$count,$pos+1);
而你並沒有在這個分支裡對 $pos 作處理(也就是將結果返回到上一級遞迴)
我說的可能連我自己都不好理解,看代碼:
function newtripos($str,$findstr,$count,$off=0){
$pos=stripos($str,$findstr,$off);
$count--;
if($count>0 && $pos!=false){
$pos=newtripos($str,$findstr,$count,$pos+1);
}
return $pos;
}
------解決方案--------------------
差別大多了,因為沒有去掉else時,相當於
if($count>0 && $pos!=false){
$pos=newtripos($str,$findstr,$count,$pos+1);
return null;
}else{
var_dump($pos);
return $pos;
}
}
?>
而去掉else以後,則是
if($count>0 && $pos!=false){
$pos=newtripos($str,$findstr,$count,$pos+1);
return $pos;
}else{
var_dump($pos);
return $pos;
}
}
?>