php – strpos()在while循环中永远不会结束
作者:互联网
有一个字符串,
$string = ‘Foo, Bar, Test,’;
我想要做的就是计算字符串中逗号的数量.
但是一切都会导致无限循环.
所以,我试过#1:
$count = 0;
while($pos = strpos($string, ',') !== FALSE){
$count++;
// Never ends
}
还有#2,
while(true){
if ( strpos($string, ',') !== FALSE ){
$count++;
} else {
break;
}
}
他们都没有结束.哪里有问题?
解决方法:
你可以使用substr_count():
substr_count($string, ',');
在您的代码中,strpos()需要第三个参数来开始从特定偏移量进行搜索,例如:
strpos($string, ',', 12); // start searching from index 12
它不像迭代器那样工作.像这样的东西会起作用:
$start = 0;
while (($pos = strpos($string, ',', $start)) !== FALSE) {
$count++;
$start = $pos + 1;
}
更新
如果你想得到真正的幻想:
class IndexOfIterator implements Iterator
{
private $haystack;
private $needle;
private $start;
private $pos;
private $len;
private $key;
public function __construct($haystack, $needle, $start = 0)
{
$this->haystack = $haystack;
$this->needle = $needle;
$this->start = $start;
}
public function rewind()
{
$this->search($this->start);
$this->key = 0;
}
public function valid()
{
return $this->pos !== false;
}
public function next()
{
$this->search($this->pos + 1);
++$this->key;
}
public function current()
{
return $this->pos;
}
public function key()
{
return $this->key;
}
private function search($pos)
{
$this->pos = strpos($this->haystack, $this->needle, $pos);
}
}
foreach (new IndexOfIterator($string, ',') as $match) {
var_dump($match);
}
标签:strpos,php,while-loop 来源: https://codeday.me/bug/20190725/1535585.html