你可以使用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);
}