groupJoin() public méthode

Matches the values with the supplied values according to the supplied filter, groups the the joined values for every original and then maps into as according to the supplied function.
public groupJoin ( array | Traversable $values ) : Pinq\Interfaces\IJoiningOnTraversable
$values array | Traversable
Résultat Pinq\Interfaces\IJoiningOnTraversable
Exemple #1
0
 /**
  * @dataProvider assocMixedValues
  */
 public function testCalledWithCorrectValueAndKeyParameters(\Pinq\ITraversable $traversable, array $data)
 {
     $traversable->groupJoin([0 => 0])->on(function ($outer, $inner, $outerKey, $innerKey) use($data) {
         $this->assertSame($data[$outerKey], $outer);
         $this->assertSame($inner, 0);
         $this->assertSame($innerKey, 0);
         return true;
     })->to(function ($outer, \Pinq\ITraversable $group, $outerKey, $groupKey) use($data) {
         $this->assertSame($data[$outerKey], $outer);
         $this->assertSame($group->asArray(), [0 => 0]);
         $this->assertSame($groupKey, 0);
     })->asArray();
     $traversable->groupJoin([0 => 0])->onEquality(function ($outer, $outerKey) use($data) {
         $this->assertSame($data[$outerKey], $outer);
         return 'group Key';
     }, function ($inner, $innerKey) {
         $this->assertSame($inner, 0);
         $this->assertSame($innerKey, 0);
         return 'group Key';
     })->to(function ($outer, \Pinq\ITraversable $group, $outerKey, $groupKey) use($data) {
         $this->assertSame($data[$outerKey], $outer);
         $this->assertSame($group->asArray(), [0 => 0]);
         $this->assertSame($groupKey, 'group Key');
     })->asArray();
 }
 /**
  * @dataProvider people
  */
 public function testGroupJoinToSelfWithCondition(\Pinq\ITraversable $traversable, array $data)
 {
     $joinedlastNames = $traversable->groupJoin($traversable)->onEquality(function ($outer) {
         return $outer['firstName'][0];
     }, function ($inner) {
         return $inner['lastName'][0];
     })->to(function ($person, \Pinq\ITraversable $joinedPeople) {
         return $person['firstName'] . '{' . $joinedPeople->implode(',', function ($person) {
             return $person['lastName'];
         }) . '}';
     })->implode(':');
     $this->assertEquals('Zoe{}:Alex{}:Daniel{Denali,Desopolous,Dekresta}:Casy{}:Dave{Denali,Desopolous,Dekresta}:' . 'Hugo{}:Sandy{}:Beth{Black,Baronksy}:David{Denali,Desopolous,Dekresta}:Daniel{Denali,Desopolous,Dekresta}', $joinedlastNames);
 }
Exemple #3
0
 /**
  * Evaluates the join segment values and filter upon the supplied traversable.
  *
  * @param ITraversable                       $traversable
  * @param Common\Join\Options                $join
  * @param Queries\IResolvedParameterRegistry $resolvedParameters
  *
  * @return \Pinq\Interfaces\IJoiningToTraversable
  */
 public static function evaluateJoinOptions(ITraversable $traversable, Common\Join\Options $join, Queries\IResolvedParameterRegistry $resolvedParameters)
 {
     $values = self::evaluateSource($join->getSource(), $resolvedParameters);
     $joiningTraversable = $join->isGroupJoin() ? $traversable->groupJoin($values) : $traversable->join($values);
     if ($join->hasFilter()) {
         $filter = $join->getFilter();
         if ($filter instanceof Common\Join\Filter\Custom) {
             $joiningTraversable = $joiningTraversable->on($resolvedParameters[$filter->getOnFunction()->getCallableId()]);
         } elseif ($filter instanceof Common\Join\Filter\Equality) {
             $joiningTraversable = $joiningTraversable->onEquality($resolvedParameters[$filter->getOuterKeyFunction()->getCallableId()], $resolvedParameters[$filter->getInnerKeyFunction()->getCallableId()]);
         }
     }
     if ($join->hasDefault()) {
         $joiningTraversable = $joiningTraversable->withDefault($resolvedParameters[$join->getDefaultValueId()], $resolvedParameters[$join->getDefaultKeyId()]);
     }
     return $joiningTraversable;
 }