Ouzo\Utilities\Arrays::groupBy PHP Метод

groupBy() публичный статический Метод

Example: $obj1 = new stdClass(); $obj1->name = 'a'; $obj1->description = '1'; $obj2 = new stdClass(); $obj2->name = 'b'; $obj2->description = '2'; $obj3 = new stdClass(); $obj3->name = 'b'; $obj3->description = '3'; $array = array($obj1, $obj2, $obj3); $grouped = Arrays::groupBy($array, Functions::extractField('name')); Result: Array ( [a] => Array ( [0] => stdClass Object ( [name] => a [description] => 1 ) ) [b] => Array ( [0] => stdClass Object ( [name] => b [description] => 2 ) [1] => stdClass Object ( [name] => b [description] => 3 ) ) )
public static groupBy ( array $elements, callable $keyFunction, string | null $orderField = null ) : array
$elements array
$keyFunction callable
$orderField string | null
Результат array
    public static function groupBy(array $elements, $keyFunction, $orderField = null)
    {
        $map = array();
        if (!empty($orderField)) {
            $elements = self::orderBy($elements, $orderField);
        }
        foreach ($elements as $element) {
            $key = Functions::call($keyFunction, $element);
            $map[$key][] = $element;
        }
        return $map;
    }

Usage Example

Пример #1
0
 public function getClosedByRoundForCricket()
 {
     $hits = Hit::join('game_user->user')->where(['game_user_id' => $this->id])->order('hits.id asc')->fetchAll();
     $byRound = Arrays::groupBy($hits, Functions::extract()->round);
     $closedInRound = [];
     $closed = [15 => 0, 16 => 0, 17 => 0, 18 => 0, 19 => 0, 20 => 0, 25 => 0];
     foreach ($byRound as $round => $hits) {
         $closedInCurrentRound = 0;
         foreach ($hits as $hit) {
             if (isset($closed[$hit->field])) {
                 $closedField = min($hit->multiplier, 3 - $closed[$hit->field]);
                 $closedInCurrentRound += $closedField;
                 $closed[$hit->field] += $closedField;
             }
         }
         $closedInRound[$round] = $closedInCurrentRound;
     }
     return $closedInRound;
 }
All Usage Examples Of Ouzo\Utilities\Arrays::groupBy