File Manager

Current Directory: /home/astoriaah/www/templates/yootheme-BK/vendor/yootheme/framework/src/Util
Viewing File: /home/astoriaah/www/templates/yootheme-BK/vendor/yootheme/framework/src/Util/Arr.php
<?php namespace YOOtheme\Util; class Arr { use MethodTrait; /** * Checks if the given key exists. * * @param array|\ArrayAccess $array * @param string $key * @return bool */ public static function has($array, $key) { if ($key === null) { return false; } if (static::exists($array, $key)) { return true; } if (!strpos($key, '.')) { return false; } foreach (explode('.', $key) as $part) { if (static::exists($array, $part)) { $array = $array[$part]; } else { return false; } } return true; } /** * Gets a value by key. * * @param array|\ArrayAccess $array * @param string $key * @param mixed $default * @return mixed */ public static function get($array, $key, $default = null) { if ($key === null) { return $array; } if (static::exists($array, $key)) { return $array[$key]; } if (!strpos($key, '.')) { return $default; } foreach (explode('.', $key) as $part) { if (static::exists($array, $part)) { $array = $array[$part]; } else { return $default; } } return $array; } /** * Sets a value. * * @param array $array * @param string $key * @param mixed $value * @return array */ public static function set(&$array, $key, $value) { if ($key === null) { return $array = $value; } $parts = explode('.', $key); while (count($parts) > 1) { $part = array_shift($parts); if (!isset($array[$part]) || !is_array($array[$part])) { $array[$part] = []; } $array = &$array[$part]; } $array[array_shift($parts)] = $value; return $array; } /** * Removes a value from array. * * @param array $array * @param mixed $value * @param bool $strict * @return array */ public static function pull(&$array, $value, $strict = false) { if ($keys = array_keys($array, $value, $strict)) { foreach ($keys as $key) { unset($array[$key]); } $new = array_values($array); $array = &$new; } return $array; } /** * Removes a value from array by key. * * @param array $array * @param array|string $keys */ public static function remove(&$array, $keys) { $original = &$array; foreach ((array) $keys as $key) { $array = &$original; $parts = explode('.', $key); while (count($parts) > 1) { $part = array_shift($parts); if (isset($array[$part]) && is_array($array[$part])) { $array = &$array[$part]; } else { continue 2; } } unset($array[array_shift($parts)]); } } /** * Checks if all values pass the predicate truth test. * * @param array $array * @param array|callable $predicate * @return bool */ public static function every($array, $predicate) { $callback = is_callable($predicate) ? $predicate : static::matches($predicate); foreach ($array as $key => $value) { if (!$callback($value, $key)) { return false; } } return true; } /** * Checks if some values pass the predicate truth test. * * @param array $array * @param array|callable $predicate * @return bool */ public static function some($array, $predicate) { $callback = is_callable($predicate) ? $predicate : static::matches($predicate); foreach ($array as $key => $value) { if ($callback($value, $key)) { return true; } } return false; } /** * Gets the picked values from the given array. * * @param array $array * @param array|string $keys * @return array */ public static function pick($array, $keys) { return array_intersect_key($array, array_flip((array) $keys)); } /** * Gets all of the given array without the specified keys. * * @param array $array * @param array|string $keys * @return array */ public static function omit($array, $keys) { static::remove($array, $keys); return $array; } /** * Gets the first value in an array passing the predicate truth test. * * @param array $array * @param array|callable $predicate * @return mixed */ public static function find($array, $predicate) { $callback = is_callable($predicate) ? $predicate : static::matches($predicate); foreach ($array as $key => $value) { if ($callback($value, $key)) { return $value; } } return null; } /** * Gets all values in an array passing the predicate truth test. * * @param array $array * @param array|callable $predicate * @return array */ public static function filter($array, $predicate = null) { $callback = is_null($predicate) || is_callable($predicate) ? $predicate : static::matches($predicate); if (isset($callback) && version_compare(PHP_VERSION, '5.6.0', '<')) { $filtered = []; foreach ($array as $key => $value) { if ($callback($value, $key)) { $filtered[$key] = $value; } } return $filtered; } return $callback ? array_filter($array, $callback, 1) : array_filter($array); } /** * Merges two arrays. * * @param array $array1 * @param array $array2 * @param bool $recursive * @return array */ public static function merge($array1, $array2, $recursive = false) { if (!$recursive) { return array_merge($array1, $array2); } foreach ($array2 as $key => $value) { if (isset($array1[$key])) { if (is_int($key)) { $array1[] = $value; } else if (is_array($value) && is_array($array1[$key])) { $array1[$key] = static::merge($array1[$key], $value, $recursive); } else { $array1[$key] = $value; } } else { $array1[$key] = $value; } } return $array1; } /** * Extracts values by keys. * * @param array $data * @param array $keys * @param bool $include * @return array */ public static function extract($data, array $keys = null, $include = true) { if (!$keys) { return $data; } $data = static::flatten($data); $result = []; foreach ($data as $keypath => $value) { $add = !$include; foreach ($keys as $key) { if (0 === strpos($keypath, $key)) { $add = $include; break; } } if ($add) { $result[$keypath] = $value; } } return static::expand($result); } /** * Flattens an array. * * @param array $array * @param string $path * @return array */ public static function flatten($array, $path = '') { $result = []; foreach ($array as $key => $value) { if (is_array($value)) { $result = array_merge($result, static::flatten($value, $path.$key.'.')); } else { $result[$path.$key] = $value; } } return $result; } /** * Expands an array. * * @param array $array * @return array */ public static function expand($array) { $result = []; foreach ($array as $key => $value) { $keys = explode('.', $key); $values = &$result; while (count($keys) > 1) { $key = array_shift($keys); if (!isset($values[$key]) || !is_array($values[$key])) { $values[$key] = []; } $values = &$values[$key]; } $values[array_shift($keys)] = $value; } return $result; } /** * Checks if the given key exists. * * @param array|\ArrayAccess $array * @param string $key * @return bool */ public static function exists($array, $key) { if (is_array($array)) { return array_key_exists($key, $array); } if ($array instanceof \ArrayAccess) { return $array->offsetExists($key); } return false; } /** * Checks if the given value is array accessible. * * @param mixed $value * @return bool */ public static function accessible($value) { return is_array($value) || $value instanceof \ArrayAccess; } /** * Creates a callback function to match array values. * * @param array $predicate * @return callable */ protected static function matches(array $predicate) { return function ($array) use ($predicate) { if (!static::accessible($array)) { return false; } foreach ($predicate as $key => $value) { if (!static::exists($array, $key)) { return false; } if ($array[$key] != $value) { return false; } } return true; }; } }