Esempio n. 1
0
 /**
  * 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));
 }
Esempio n. 2
0
 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);
 }
Esempio n. 3
0
 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));
 }