| <?php |
| |
| namespace LdapRecord\Support; |
| |
| use ArrayAccess; |
| |
| class Arr |
| { |
| /** |
| * Determine whether the given value is array accessible. |
| * |
| * @param mixed $value |
| * |
| * @return bool |
| */ |
| public static function accessible($value) |
| { |
| return is_array($value) || $value instanceof ArrayAccess; |
| } |
| |
| /** |
| * Determine if the given key exists in the provided array. |
| * |
| * @param \ArrayAccess|array $array |
| * @param string|int $key |
| * |
| * @return bool |
| */ |
| public static function exists($array, $key) |
| { |
| if ($array instanceof ArrayAccess) { |
| return $array->offsetExists($key); |
| } |
| |
| return array_key_exists($key, $array); |
| } |
| |
| /** |
| * If the given value is not an array and not null, wrap it in one. |
| * |
| * @param mixed $value |
| * |
| * @return array |
| */ |
| public static function wrap($value) |
| { |
| if (is_null($value)) { |
| return []; |
| } |
| |
| return is_array($value) ? $value : [$value]; |
| } |
| |
| /** |
| * Return the first element in an array passing a given truth test. |
| * |
| * @param iterable $array |
| * @param callable|null $callback |
| * @param mixed $default |
| * |
| * @return mixed |
| */ |
| public static function first($array, callable $callback = null, $default = null) |
| { |
| if (is_null($callback)) { |
| if (empty($array)) { |
| return Helpers::value($default); |
| } |
| |
| foreach ($array as $item) { |
| return $item; |
| } |
| } |
| |
| foreach ($array as $key => $value) { |
| if ($callback($value, $key)) { |
| return $value; |
| } |
| } |
| |
| return Helpers::value($default); |
| } |
| |
| /** |
| * Return the last element in an array passing a given truth test. |
| * |
| * @param array $array |
| * @param callable|null $callback |
| * @param mixed $default |
| * |
| * @return mixed |
| */ |
| public static function last($array, callable $callback = null, $default = null) |
| { |
| if (is_null($callback)) { |
| return empty($array) ? Helpers::value($default) : end($array); |
| } |
| |
| return static::first(array_reverse($array, true), $callback, $default); |
| } |
| |
| /** |
| * Get an item from an array using "dot" notation. |
| * |
| * @param ArrayAccess|array $array |
| * @param string|int|null $key |
| * @param mixed $default |
| * |
| * @return mixed |
| */ |
| public static function get($array, $key, $default = null) |
| { |
| if (! static::accessible($array)) { |
| return Helpers::value($default); |
| } |
| |
| if (is_null($key)) { |
| return $array; |
| } |
| |
| if (static::exists($array, $key)) { |
| return $array[$key]; |
| } |
| |
| if (strpos($key, '.') === false) { |
| return $array[$key] ?? Helpers::value($default); |
| } |
| |
| foreach (explode('.', $key) as $segment) { |
| if (static::accessible($array) && static::exists($array, $segment)) { |
| $array = $array[$segment]; |
| } else { |
| return Helpers::value($default); |
| } |
| } |
| |
| return $array; |
| } |
| } |