SPL 函数
在线手册:中文 英文
PHP手册

iterator_count

(PHP 5 >= 5.1.0)

iterator_count计算迭代器中元素的个数

说明

int iterator_count ( Traversable $iterator )

计算迭代器中的元素个数。

参数

iterator

要计数的迭代器。

返回值

迭代器iterator中的元素个数。

范例

Example #1 iterator_count() example

<?php
$iterator 
= new ArrayIterator(array('recipe'=>'pancakes''egg''milk''flour'));
var_dump(iterator_count($iterator));
?>

以上例程会输出:

int(4)


SPL 函数
在线手册:中文 英文
PHP手册
PHP手册 - N: 计算迭代器中元素的个数

用户评论:

donovan jimenez (23-Feb-2009 05:34)

Be careful of thinking of iterators and arrays as completely analogous in your PHP code. iterator_count will NOT return your iterator to its previous state after looping through it for the count. Any iterator implementation that also implements Countable::count isn't required to do so either.

This is clearest in example form:
<?php
$array
= array(
   
1 => 'foo',
   
2 => 'bar'
);

foreach (
$array as $key => $value)
{
    echo
"$key: $value (", count($array), ")\n";
}

$iterator = new ArrayIterator($array);

foreach (
$iterator as $key => $value)
{
    echo
"$key: $value (", iterator_count($iterator), ")\n";
}
?>

outputs:
1: foo (2)
2: bar (2)
1: foo (2)

Notice that because of how iterator_count works we never see the second iterator value because the next call to then Iterator::valid() implementation returns false (its at the end of the iterator).

Micha Mech (09-May-2008 11:38)

Yes, but ...

Traversable: "Abstract base interface that cannot be implemented alone. Instead it must be implemented by either IteratorAggregate or Iterator."

So You have to implement IteratorAggregate or Iterator because You can not implement Traversable.

Ard (31-Aug-2006 11:39)

Note that you that the iterator parameter doesn't need to be of type Aggregate. As the spl documentation on http://www.php.net/~helly/php/ext/spl/ defines it in the following way:

    iterator_count (Traversable $it).

So you can count the number of files in a given directory quite easily:
<?php iterator_count(new DirectoryIterator('path/to/dir/'));    ?>