/** * Extract a property from a collection of objects. * * @param Traversable|array $collection * @param string $propertyName * @return array */ function pluck($collection, $propertyName) { InvalidArgumentException::assertCollection($collection, __FUNCTION__, 1); InvalidArgumentException::assertPropertyName($propertyName, __FUNCTION__, 2); $aggregation = array(); foreach ($collection as $index => $element) { $value = null; if (is_object($element) && isset($element->{$propertyName})) { $value = $element->{$propertyName}; } elseif ((is_array($element) || $element instanceof ArrayAccess) && isset($element[$propertyName])) { $value = $element[$propertyName]; } $aggregation[$index] = $value; } return $aggregation; }