groupJoin() публичный Метод

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
Результат Pinq\Interfaces\IJoiningOnTraversable
Пример #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();
 }
Пример #2
0
 /**
  * @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);
 }
Пример #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;
 }