strpos结果0在循环时停止

时间:2013-09-23 08:11:04

标签: php while-loop

我需要在字符串中找到特定字符的所有位置。我使用以下代码

$pos = 0;
 $positions = array();
 while( $pos = strpos($haystack,$needle,$pos){      
    $positions[] = $pos;
    $pos = $pos+1;  
 }

此代码的问题是,当needle位于位置1时,它返回1,因此不会进入循环。

所以我尝试了以下

     $pos = 0;
     $positions = array();
     while( ($pos = strpos($haystack,$needle,$pos) || (strpos($haystack,$needle,$pos)=== 0){        
        $positions[] = $pos;
        $pos = $pos+1;  
     }

     $pos = 0;
     $positions = array();
     while( ($pos = strpos($haystack,$needle,$pos) || (strpos($haystack,$needle,$pos) != false){        
        $positions[] = $pos;
        $pos = $pos+1;  
     }

但似乎没有任何效果。还有其他办法。

我试过的两个替代方案给我

Allowed memory size of 268435456 bytes exhausted

我认为编程错误与内存问题有关。

Plz帮助。

2 个答案:

答案 0 :(得分:2)

您需要使用!==代替!=,因为零被视为false,因此您还需要按类型进行比较:

while($pos = (strpos($haystack,$needle,$pos) !== false){
    $positions[] = $pos;
    $pos++;
}

修改

从评论中查看代码的工作版本:

$positions = array(); 
while( ($pos = strpos('lowly','l',$pos)) !== false){
    $positions[] = $pos; 
    $pos++; 
} 
print_r($positions);

看到它正常工作here

答案 1 :(得分:-1)

使用此代码..

$start = 0;
while ($pos = strpos($string, ',', $start) !== FALSE) {
 $count++;
 $start = $pos + 1;

}