/**
* Pick a single element from a collection of objects or arrays by index.
* If no such index exists, return the default value.
*
* @param ArrayAccess|array $collection
* @param mixed $index
* @param mixed $default
* @param callable $callback Custom function to check if index exists, default function is "isset"
* @return mixed
*/
function pick($collection, $index, $default = null, callable $callback = null)
{
InvalidArgumentException::assertArrayAccess($collection, __FUNCTION__, 1);
if ($callback === null) {
if (!isset($collection[$index])) {
return $default;
}
} else {
if (!$callback($collection, $index)) {
return $default;
}
}
return $collection[$index];
}