/** * Splits a collection into sets, grouped by the result of running each value through callback. If callback is a string * instead of a function, groups by the property named by callback on each of the values. * * @param array $collection * @param callable|string $callback * * @return array * @author Aurimas Niekis <*****@*****.**> */ function collection_group_by($collection, $callback) { $result = []; foreach ($collection as $key => $value) { if (is_callable($callback)) { $groupName = call_user_func($callback, $value); } else { $groupName = $value[$callback]; } $result[$groupName] = collection_get($result, $groupName, []); $result[$groupName][$key] = $value; } return $result; }
/** * Extract single property from array of arrays * * @param array $collection * @param string $key * * @return array * @author Aurimas Niekis <*****@*****.**> */ function collection_pluck($collection, $key) { return array_map(function ($item) use($key) { return collection_get($item, $key); }, $collection); }