0

文字列内の特定の文字のすべての位置を見つける必要があります。次のコードを使用しています

$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;  
     }

しかし、何も機能していないようです。他に方法はありますか。

私が試した2つの選択肢は私に与えます

Allowed memory size of 268435456 bytes exhausted

これは、メモリの問題よりもプログラミング エラーに関係していると思います。

助けてください。

4

2 に答える 2

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);

ここで動作することを確認してください。

于 2013-09-23T08:17:12.210 に答える
-1

このコードを使用してください..

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

}
于 2013-09-23T08:24:54.473 に答える