/** * @covers ::groupBy */ public function testGroupBy() { $callback = function ($item) { return $item->id; }; $group1 = new TestObject(1); $group2 = new TestObject(2); $obj1 = new TestObject($group1); $obj2 = new TestObject($group1); $obj3 = new TestObject($group2); $objects = new SplObjectStorage(); $objects->attach($obj1); $objects->attach($obj2); $objects->attach($obj3); $expected = new SplObjectStorage(); $expected[$group1] = new SplObjectStorage(); $expected[$group1]->attach($obj1); $expected[$group1]->attach($obj2); $expected[$group2] = new SplObjectStorage(); $expected[$group2]->attach($obj3); $this->assertEquals($expected, Objects::groupBy($objects, $callback)); }
/** * Group models by repo, call yield for each repo * * @param Closure $yield Call for each repo ($repo, $models) */ public function byRepo(Closure $yield) { $repos = Objects::groupBy($this->models, function (AbstractModel $model) { return $model->getRepo()->getRootRepo(); }); foreach ($repos as $repo) { $models = new Models(); $models->addObjects($repos->getInfo()); $yield($repo, $models); } }