indexBy() public méthode

All duplicate indexes will be associated with the first value for that index.
public indexBy ( callable $function ) : pinq\ITraversable
$function callable The projection function
Résultat pinq\ITraversable
Exemple #1
0
 /**
  * @dataProvider everything
  */
 public function testThatIdenticalNonIntegerOrStringMapToTheSameScalarKey(\Pinq\ITraversable $traversable, array $data)
 {
     foreach ([new \stdClass(), [], [1], fopen('php://input', 'r'), 3.22, null, true] as $nonStringOrInt) {
         $withNonIntOrString = $traversable->indexBy(function () use($nonStringOrInt) {
             return $nonStringOrInt;
         });
         $this->assertSame(empty($data) ? [] : [0 => reset($data)], $withNonIntOrString->asArray());
         if (is_object($nonStringOrInt)) {
             //Cloned object longer identical, should map to individual keys
             $withNonIntOrString = $traversable->indexBy(function () use($nonStringOrInt) {
                 return unserialize(serialize($nonStringOrInt));
             });
             $this->assertSame(array_values($data), $withNonIntOrString->asArray());
         }
     }
 }
Exemple #2
0
 /**
  * @dataProvider assocMixedValues
  */
 public function testThatKeysSupportNonScalarKeys(\Pinq\ITraversable $traversable, array $data)
 {
     $values = $traversable->indexBy(function () {
         return new \stdClass();
     })->reindex();
     $this->assertMatches($values, array_values($data));
 }
Exemple #3
0
 /**
  * @dataProvider assocMixedValues
  */
 public function testThatKeysSupportNonScalarKeys(\Pinq\ITraversable $traversable, array $data)
 {
     $keys = $traversable->indexBy(function () {
         return new \stdClass();
     })->keys();
     $expectedKeys = empty($data) ? [] : array_fill_keys(range(0, count($data) - 1), new \stdClass());
     $this->assertEquals($expectedKeys, $keys->asArray());
 }
Exemple #4
0
 /**
  * @dataProvider everything
  */
 public function testThatIndexByDuplicateKeyWithForeachOnlyReturnsFirstAssociatedValue(\Pinq\ITraversable $traversable, array $data)
 {
     $indexedElements = $traversable->indexBy(function () {
         return null;
     });
     $first = true;
     foreach ($indexedElements as $key => $element) {
         $this->assertSame($key, 0);
         $this->assertSame(reset($data), $element);
         $this->assertTrue($first);
         $first = false;
     }
 }
 /**
  * @dataProvider dateTimes
  */
 public function testGroupByDayOfWeekWithDateTimeKeys(\Pinq\ITraversable $traversable, array $data)
 {
     $datesGroupedByDayOfWeek = $traversable->indexBy(function (\DateTime $date) {
         return $date;
     })->select(function (\DateTime $date) {
         return $date->format('Y-m-d');
     })->groupBy(function ($string, \DateTime $date) {
         return $date->format('l');
     })->select(function (\Pinq\ITraversable $dateGroup) {
         return $dateGroup->keys()->asArray();
     })->asArray();
     $expectedDatesGroupedByDayOfWeek = [];
     foreach ($data as $date) {
         $dayOfWeek = $date->format('l');
         if (!isset($expectedDatesGroupedByDayOfWeek[$dayOfWeek])) {
             $expectedDatesGroupedByDayOfWeek[$dayOfWeek] = [];
         }
         $expectedDatesGroupedByDayOfWeek[$dayOfWeek][] = $date;
     }
     $this->assertSame($expectedDatesGroupedByDayOfWeek, $datesGroupedByDayOfWeek);
 }
Exemple #6
0
 public function visitIndexBy(Segments\IndexBy $query)
 {
     $this->traversable = $this->traversable->indexBy($this->resolvedParameters[$query->getProjectionFunction()->getCallableId()]);
 }
Exemple #7
0
 /**
  * @dataProvider dates
  */
 public function testThatOrderByMaintainsNonScalarKeys(\Pinq\ITraversable $dates, array $data)
 {
     $years = $dates->indexBy(function (\DateTime $date) {
         return $date;
     })->select(function (\DateTime $date) {
         return (int) $date->format('Y');
     })->orderByDescending(function ($year, \DateTime $date) {
         return $year;
     })->select(function ($year, \DateTime $date) {
         return $date->format('Y');
     })->implode(':');
     $this->assertSame('2005:2004:2003:2002:2001:2000', $years);
 }