mirror of
https://github.com/retailcrm/graphql-php.git
synced 2024-11-24 22:06:04 +03:00
Added Utils::groupBy as a convenience tool
This commit is contained in:
parent
c312f73df3
commit
25c42e6b52
@ -45,6 +45,12 @@ class Utils
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $traversable
|
||||||
|
* @param callable $predicate
|
||||||
|
* @return array
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
public static function filter($traversable, callable $predicate)
|
public static function filter($traversable, callable $predicate)
|
||||||
{
|
{
|
||||||
self::invariant(is_array($traversable) || $traversable instanceof \Traversable, __METHOD__ . ' expects array or Traversable');
|
self::invariant(is_array($traversable) || $traversable instanceof \Traversable, __METHOD__ . ' expects array or Traversable');
|
||||||
@ -100,6 +106,37 @@ class Utils
|
|||||||
return $map;
|
return $map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Splits original traversable to several arrays with keys equal to $keyFn return
|
||||||
|
*
|
||||||
|
* E.g. Utils::groupBy([1, 2, 3, 4, 5], function($value) {return $value % 3}) will output:
|
||||||
|
* [
|
||||||
|
* 1 => [1, 4],
|
||||||
|
* 2 => [2, 5],
|
||||||
|
* 0 => [3],
|
||||||
|
* ]
|
||||||
|
*
|
||||||
|
* $keyFn is also allowed to return array of keys. Then value will be added to all arrays with given keys
|
||||||
|
*
|
||||||
|
* @param $traversable
|
||||||
|
* @param callable $keyFn function($value, $key) => $newKey(s)
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function groupBy($traversable, callable $keyFn)
|
||||||
|
{
|
||||||
|
self::invariant(is_array($traversable) || $traversable instanceof \Traversable, __METHOD__ . ' expects array or Traversable');
|
||||||
|
|
||||||
|
$grouped = [];
|
||||||
|
foreach ($traversable as $key => $value) {
|
||||||
|
$newKeys = (array) $keyFn($value, $key);
|
||||||
|
foreach ($newKeys as $key) {
|
||||||
|
$grouped[$key][] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $grouped;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $test
|
* @param $test
|
||||||
* @param string $message
|
* @param string $message
|
||||||
|
Loading…
Reference in New Issue
Block a user