mirror of
https://codeberg.org/streams/streams.git
synced 2024-09-23 19:15:14 +00:00
45 lines
1.4 KiB
PHP
45 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) {
|
||
|
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;
|
||
|
}
|
||
|
}
|