Source of file Cycle.php
Size: 4,198 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/View/Helper/Cycle.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\View\Helper; use Iterator; /** * Helper for alternating between set of values */ class Cycle extends AbstractHelper implements Iterator { /** * Default name * * @var string */ const DEFAULT_NAME = 'default'; /** * Array of values * * @var array */ protected $data = array(self::DEFAULT_NAME=>array()); /** * Actual name of cycle * * @var string */ protected $name = self::DEFAULT_NAME; /** * Pointers * * @var array */ protected $pointers = array(self::DEFAULT_NAME =>-1); /** * Add elements to alternate * * @param array $data * @param string $name * @return Cycle */ public function __invoke(array $data = array(), $name = self::DEFAULT_NAME) { if (!empty($data)) { $this->data[$name] = $data; } $this->setName($name); return $this; } /** * Cast to string * * @return string */ public function __toString() { return $this->toString(); } /** * Turn helper into string * * @return string */ public function toString() { return (string) $this->data[$this->name][$this->key()]; } /** * Add elements to alternate * * @param array $data * @param string $name * @return Cycle */ public function assign(Array $data , $name = self::DEFAULT_NAME) { $this->setName($name); $this->data[$name] = $data; $this->rewind(); return $this; } /** * Sets actual name of cycle * * @param $name * @return Cycle */ public function setName($name = self::DEFAULT_NAME) { $this->name = $name; if (!isset($this->data[$this->name])) { $this->data[$this->name] = array(); } if (!isset($this->pointers[$this->name])) { $this->rewind(); } return $this; } /** * Gets actual name of cycle * * @return string */ public function getName() { return $this->name; } /** * Return all elements * * @return array */ public function getAll() { return $this->data[$this->name]; } /** * Move to next value * * @return Cycle */ public function next() { $count = count($this->data[$this->name]); if ($this->pointers[$this->name] == ($count - 1)) { $this->pointers[$this->name] = 0; } else { $this->pointers[$this->name] = ++$this->pointers[$this->name]; } return $this; } /** * Move to previous value * * @return Cycle */ public function prev() { $count = count($this->data[$this->name]); if ($this->pointers[$this->name] <= 0) { $this->pointers[$this->name] = $count - 1; } else { $this->pointers[$this->name] = --$this->pointers[$this->name]; } return $this; } /** * Return iteration number * * @return int */ public function key() { if ($this->pointers[$this->name] < 0) { return 0; } return $this->pointers[$this->name]; } /** * Rewind pointer * * @return Cycle */ public function rewind() { $this->pointers[$this->name] = -1; return $this; } /** * Check if element is valid * * @return bool */ public function valid() { return isset($this->data[$this->name][$this->key()]); } /** * Return current element * * @return mixed */ public function current() { return $this->data[$this->name][$this->key()]; } } |