我需要在字符串中找到特定字符的所有位置。我使用以下代码
$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 :(得分: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;
}