47 lines
1.4 KiB
PHP
47 lines
1.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Foreach Runtime Methods count
|
|
*
|
|
* @package Smarty
|
|
* @subpackage PluginsInternal
|
|
* @author Uwe Tews
|
|
*
|
|
**/
|
|
class Smarty_Internal_Runtime_Foreach
|
|
{
|
|
/**
|
|
* [util function] counts an array, arrayAccess/traversable or PDOStatement object
|
|
*
|
|
* @param mixed $value
|
|
*
|
|
* @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0
|
|
* for empty elements
|
|
*/
|
|
public function count($value)
|
|
{
|
|
if (is_array($value) === true || $value instanceof Countable) {
|
|
return count($value);
|
|
} elseif ($value instanceof IteratorAggregate) {
|
|
// Note: getIterator() returns a Traversable, not an Iterator
|
|
// thus rewind() and valid() methods may not be present
|
|
return iterator_count($value->getIterator());
|
|
} elseif ($value instanceof Iterator) {
|
|
if ($value instanceof Generator) {
|
|
return 1;
|
|
}
|
|
return iterator_count($value);
|
|
} elseif ($value instanceof PDOStatement) {
|
|
return $value->rowCount();
|
|
} elseif ($value instanceof Traversable) {
|
|
return iterator_count($value);
|
|
} elseif ($value instanceof ArrayAccess) {
|
|
if ($value->offsetExists(0)) {
|
|
return 1;
|
|
}
|
|
} elseif (is_object($value)) {
|
|
return count($value);
|
|
}
|
|
return 0;
|
|
}
|
|
}
|