/** * Map -- extracts a given field from the values. * * This is a alias for ->map(FnGen::fnPluck()) * * @param string $fieldName -- name of the field to extract * @param mixed $default = null * @return static */ public function pluck($fieldName, $default = null) { return $this->map(FnGen::fnPluck($fieldName, $default)); }
public function testGroupBy() { $fruitOrders = TestData::$fruit; $fnExtractFruitCountsForName = function ($fruit, $name) { return Sequence::make($fruit)->filter(FnGen::fnCallChain(FnGen::fnPluck('name'), FnGen::fnIsEqual($name)))->values()->to_a(); }; $fruitByName = Sequence::make($fruitOrders)->groupBy(FnGen::fnPluck('name'))->to_a(); foreach ($fruitByName as $name => $orders) { $filteredOrders = $fnExtractFruitCountsForName($fruitOrders, $name); $this->assertEquals($filteredOrders, $orders); } $peopleByAge = Sequence::make(TestData::$people)->groupBy(fn\fnPluck('age'), array_fill(0, 100, array()))->toArray(); $this->assertEquals(array(), $peopleByAge[0]); $peopleAge55 = Sequence::make(TestData::$people)->filter(fn\fnCallChain(fn\fnPluck('age'), fn\fnIsEqual(55)))->toValues(); $this->assertEquals($peopleAge55, $peopleByAge[55]); // Test late binding of $init $peopleByAgeFnInit = Sequence::make(TestData::$people)->groupBy(fn\fnPluck('age'), function () { return array_fill(0, 100, array()); })->toArray(); $this->assertEquals($peopleByAge, $peopleByAgeFnInit); }
public function testFnNestedUKeyBy() { $data = array(array('name' => 'Bob'), array('name' => 'Alex'), array('name' => 'Bill'), array('name' => 'Ben'), array('name' => 'Ann'), array('name' => 'Tim'), array('name' => 'Jerry'), array('name' => 'Phil'), array('name' => 'Ken')); $fn = FnGen::fnNestedUkeyBy(FnGen::fnPluck('name')); $expected = Sequence::make($data)->keyBy(FnGen::fnPluck('name'))->to_a(); $this->assertEquals($expected, $fn($data)); }