for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Vvval\Spiral;
use Spiral\Core\Component;
use Spiral\Pagination\PaginatorAwareInterface;
use Spiral\Pagination\Traits\PaginatorTrait;
class PaginableArray extends Component implements \Countable, PaginatorAwareInterface, \Iterator
{
use PaginatorTrait;
/** @var array */
protected $source = [];
/** @var int */
private $cursor;
private $keys = [];
/**
* ArraySource constructor.
*
* @param array $source
*/
public function __construct(array $source = [])
$this->source = $source;
$this->keys = array_keys($this->source);
}
* @param bool $paginate
* @return array
public function iterate(bool $paginate = true): array
if ($paginate && $this->hasPaginator()) {
return array_slice(
$this->source,
$this->getPaginator()->getOffset(),
$this->getPaginator()->getLimit()
);
return $this->source;
* {@inheritdoc}
* @return int
public function count(): int
return count($this->iterate(false));
* @return mixed
public function current()
$offset = $this->hasPaginator() ? $this->getPaginator()->getOffset() : 0;
$key = $this->keys[$this->key() + $offset];
return $this->source[$key];
public function next()
$this->cursor++;
* @return
public function key(): int
return $this->cursor;
* @return bool
public function valid(): bool
return $this->key() < count($this->iterate());
public function rewind()
$this->cursor = 0;