beautify code, ajout méthode pluck et toArray à l'objet collection

This commit is contained in:
2023-11-04 09:32:51 +01:00
parent ff515202c9
commit aa551c697b
2 changed files with 40 additions and 5 deletions

View File

@@ -57,8 +57,7 @@ class Collection implements IteratorAggregate, Countable
public function map(callable $fn): Collection public function map(callable $fn): Collection
{ {
$tmp = array_map($fn, $this->elements); return new Collection(array_map($fn, $this->elements));
return new Collection($tmp);
} }
public function each(callable $fn): void public function each(callable $fn): void
@@ -68,9 +67,24 @@ class Collection implements IteratorAggregate, Countable
public function filter(callable $fn): Collection public function filter(callable $fn): Collection
{ {
$tmp = array_filter($this->elements, $fn, ARRAY_FILTER_USE_BOTH); return new Collection(array_filter($this->elements, $fn, ARRAY_FILTER_USE_BOTH));
$collect = new Collection($tmp); }
return $collect;
public function pluck(string $key): Collection
{
return new Collection(array_map(function ($item) use ($key) {
if (is_object($item)) {
return isset($item->$key) ? $item->$key : null;
}
if (is_array($item)) {
return isset($item[$key]) ? $item[$key] : null;
}
}, $this->elements));
}
public function toArray(): array
{
return $this->elements;
} }
public function empty(): bool public function empty(): bool

View File

@@ -50,5 +50,26 @@ test("collection", function () {
return $item + $carry; return $item + $carry;
},$init); },$init);
expect($reduce)->toBe(55); expect($reduce)->toBe(55);
$array = $coll->toArray();
expect($array)->toBeArray();
expect(count($array))->toBe(11);
$obj = new \stdClass();
$obj->key = "test";
$obj->val = 1;
$obj2 = new \stdClass();
$obj2->key = "test2";
$obj2->val = 2;
$collo = new Collection([$obj,$obj2]);
expect($collo)->toBeInstanceOf(Collection::class);
expect(count($collo))->toBe(2);
$pluck = $collo->pluck("key");
expect($pluck)->toBeInstanceOf(Collection::class);
expect(count($pluck))->toBe(2);
expect($pluck->first())->toBe("test");
}); });