X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FBaseCollection.php;h=5b35653fdd661c86a5d79d16ee3585429c7a81d9;hb=24a82110fd45a8422efee0677b7acc214aa66e9a;hp=35d8dbeed91ed2c9800511b89acd3a5348bd7c0e;hpb=c748a82e8f829a699a8e9368cb93b4842334ec22;p=friendica.git diff --git a/src/BaseCollection.php b/src/BaseCollection.php index 35d8dbeed9..5b35653fdd 100644 --- a/src/BaseCollection.php +++ b/src/BaseCollection.php @@ -1,11 +1,26 @@ . + * + */ namespace Friendica; -use Friendica\Database\Database; -use Friendica\Database\DBA; -use Psr\Log\LoggerInterface; - /** * The Collection classes inheriting from this abstract class are meant to represent a list of database record. * The associated model class has to be provided in the child classes. @@ -21,15 +36,38 @@ abstract class BaseCollection extends \ArrayIterator protected $totalCount = 0; /** - * @param BaseModel[] $models - * @param int|null $totalCount + * @param BaseEntity[] $entities + * @param int|null $totalCount + */ + public function __construct(array $entities = [], int $totalCount = null) + { + parent::__construct($entities); + + $this->totalCount = $totalCount ?? count($entities); + } + + /** + * @inheritDoc */ - public function __construct(array $models = [], int $totalCount = null) + public function offsetSet($offset, $value) { - parent::__construct($models); + if (is_null($offset)) { + $this->totalCount++; + } - $this->models = $models; - $this->totalCount = $totalCount ?? count($models); + parent::offsetSet($offset, $value); + } + + /** + * @inheritDoc + */ + public function offsetUnset($offset) + { + if ($this->offsetExists($offset)) { + $this->totalCount--; + } + + parent::offsetUnset($offset); } /** @@ -39,4 +77,42 @@ abstract class BaseCollection extends \ArrayIterator { return $this->totalCount; } + + /** + * Return the values from a single field in the collection + * + * @param string $column + * @param int|null $index_key + * @return array + * @see array_column() + */ + public function column($column, $index_key = null) + { + return array_column($this->getArrayCopy(), $column, $index_key); + } + + /** + * Apply a callback function on all elements in the collection and returns a new collection with the updated elements + * + * @param callable $callback + * @return BaseCollection + * @see array_map() + */ + public function map(callable $callback) + { + return new static(array_map($callback, $this->getArrayCopy()), $this->getTotalCount()); + } + + /** + * Filters the collection based on a callback that returns a boolean whether the current item should be kept. + * + * @param callable|null $callback + * @param int $flag + * @return BaseCollection + * @see array_filter() + */ + public function filter(callable $callback = null, int $flag = 0) + { + return new static(array_filter($this->getArrayCopy(), $callback, $flag)); + } }