为什么while(0)不执行代码?

时间:2017-08-26 09:28:18

标签: php function

<?php  
$efFect=0; 
$find='is';
$find_len=strlen($find);
$string22 ='this is space is  function';

while ($str_position =strpos($string22,$find,$effect)){
    echo $find.'the postion in '. $str_position.'<br>';
    $efFect = $str_position + $find_len ;
}
?>

1 个答案:

答案 0 :(得分:0)

0是假值。您应该通过检查strpos是否实际返回false来使您的检查更可靠。

<?php  
$effect=0; // not $efFect as variables names are case sensitive in PHP
$find='is';
$find_len=strlen($find);
$string22 ='this is space is  function';

while (($str_position = strpos($string22, $find, $effect)) !== False){
    echo $find.'the postion in '. $str_position.'<br>';
    $effect = $str_position + $find_len ;
}
?>

来自文档:

  

返回针存在于相对于haystack字符串开头的位置(与offset无关)。另请注意,字符串位置从0开始,而不是1。

     

如果未找到针,则返回FALSE。

有人提到你的代码创建了一个无限循环,但事实并非如此。 strpos接受offset作为您正确使用的第三个参数。在每次迭代中,偏移量递增,使得新搜索将从最后找到的结果字符串结束的位置开始,从而避免无限循环。