2013-09-23 143 views
0

我需要找到字符串中特定字符的所有位置。我使用下面的代碼strpos結果0停止while循環

$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幫助。

+0

的可能重複[PHP查找字符串中的子字符串的所有匹配(http://stackoverflow.com/questions/15737408/php-find-all-occurrences字符串中的子字符串) –

回答

2

您需要使用!==而不是!=由於零被認爲是假的,所以你需要按類型和比較:

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

+0

輸出 致命錯誤:允許的內存大小爲268435456字節耗盡 –

+0

我不認爲它是由該代碼引起的......腳本中還發生了什麼? – Shomz

+0

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

-1

使用此代碼..

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

}