* // Get the $array['user']['name'] value from the array * $name = array_get($array, 'user.name'); * * // Return a default from if the specified item doesn't exist * $name = array_get($array, 'user.name', 'Taylor'); * * * @param array $array * @param string $key * @param mixed $default * @return mixed */ function array_get($array, $key, $default = null) { if (is_null($key)) return $array; // To retrieve the array item using dot syntax, we'll iterate through // each segment in the key and look for that value. If it exists, we // will return it, otherwise we will set the depth of the array and // look for the next segment. foreach (explode('.', $key) as $segment) { if ( ! is_array($array) or ! array_key_exists($segment, $array)) { return value($default); } $array = $array[$segment]; } return $array; } /** * Set an array item to a given value using "dot" notation. * * If no key is given to the method, the entire array will be replaced. * * * // Set the $array['user']['name'] value on the array * array_set($array, 'user.name', 'Taylor'); * * // Set the $array['user']['name']['first'] value on the array * array_set($array, 'user.name.first', 'Michael'); * * * @param array $array * @param string $key * @param mixed $value * @return void */ function array_set(&$array, $key, $value) { if (is_null($key)) return $array = $value; $keys = explode('.', $key); // This loop allows us to dig down into the array to a dynamic depth by // setting the array value for each level that we dig into. Once there // is one key left, we can fall out of the loop and set the value as // we should be at the proper depth. while (count($keys) > 1) { $key = array_shift($keys); // If the key doesn't exist at this depth, we will just create an // empty array to hold the next value, allowing us to create the // arrays to hold the final value. if ( ! isset($array[$key]) or ! is_array($array[$key])) { $array[$key] = array(); } $array =& $array[$key]; } $array[array_shift($keys)] = $value; } /** * Remove an array item from a given array using "dot" notation. * * * // Remove the $array['user']['name'] item from the array * array_forget($array, 'user.name'); * * // Remove the $array['user']['name']['first'] item from the array * array_forget($array, 'user.name.first'); * * * @param array $array * @param string $key * @return void */ function array_forget(&$array, $key) { $keys = explode('.', $key); // This loop functions very similarly to the loop in the "set" method. // We will iterate over the keys, setting the array value to the new // depth at each iteration. Once there is only one key left, we will // be at the proper depth in the array. while (count($keys) > 1) { $key = array_shift($keys); // Since this method is supposed to remove a value from the array, // if a value higher up in the chain doesn't exist, there is no // need to keep digging into the array, since it is impossible // for the final value to even exist. if ( ! isset($array[$key]) or ! is_array($array[$key])) { return; } $array =& $array[$key]; } unset($array[array_shift($keys)]); } /** * Return the first element in an array which passes a given truth test. * * * // Return the first array element that equals "Taylor" * $value = array_first($array, function($k, $v) {return $v == 'Taylor';}); * * // Return a default value if no matching element is found * $value = array_first($array, function($k, $v) {return $v == 'Taylor'}, 'Default'); * * * @param array $array * @param Closure $callback * @param mixed $default * @return mixed */ function array_first($array, $callback, $default = null) { foreach ($array as $key => $value) { if (call_user_func($callback, $key, $value)) return $value; } return value($default); } /** * Recursively remove slashes from array keys and values. * * @param array $array * @return array */ function array_strip_slashes($array) { $result = array(); foreach($array as $key => $value) { $key = stripslashes($key); // If the value is an array, we will just recurse back into the // function to keep stripping the slashes out of the array, // otherwise we will set the stripped value. if (is_array($value)) { $result[$key] = array_strip_slashes($value); } else { $result[$key] = stripslashes($value); } } return $result; } /** * Divide an array into two arrays. One with keys and the other with values. * * @param array $array * @return array */ function array_divide($array) { return array(array_keys($array), array_values($array)); } /** * Determine if "Magic Quotes" are enabled on the server. * * @return bool */ function magic_quotes() { return function_exists('get_magic_quotes_gpc') and get_magic_quotes_gpc(); } /** * Return the first element of an array. * * This is simply a convenient wrapper around the "reset" method. * * @param array $array * @return mixed */ function head($array) { return reset($array); } /** * Generate an application URL. * * * // Create a URL to a location within the application * $url = path('user/profile'); * * // Create a HTTPS URL to a location within the application * $url = path('user/profile', true); * * * @param string $url * @param bool $https * @return string */ function url($url = '', $https = false) { return Laravel\URL::to($url, $https); } /** * Generate an application URL to an asset. * * @param string $url * @param bool $https * @return string */ function asset($url, $https = false) { return Laravel\URL::to_asset($url, $https); } /** * Generate a URL to a controller action. * * * // Generate a URL to the "index" method of the "user" controller * $url = action('user@index'); * * // Generate a URL to http://example.com/user/profile/taylor * $url = action('user@profile', array('taylor')); * * * @param string $action * @param array $parameters * @return string */ function action($action, $parameters = array()) { return Laravel\URL::to_action($action, $parameters); } /** * Generate a URL from a route name. * * * // Create a URL to the "profile" named route * $url = route('profile'); * * // Create a URL to the "profile" named route with wildcard parameters * $url = route('profile', array($username)); * * * @param string $name * @param array $parameters * @return string */ function route($name, $parameters = array()) { return Laravel\URL::to_route($name, $parameters); } /** * Determine if a given string begins with a given value. * * @param string $haystack * @param string $needle * @return bool */ function starts_with($haystack, $needle) { return strpos($haystack, $needle) === 0; } /** * Determine if a given string ends with a given value. * * @param string $haystack * @param string $needle * @return bool */ function ends_with($haystack, $needle) { return $needle == substr($haystack, strlen($haystack) - strlen($needle)); } /** * Determine if a given string contains a given sub-string. * * @param string $haystack * @param string|array $needle * @return bool */ function str_contains($haystack, $needle) { foreach ((array) $needle as $n) { if (strpos($haystack, $n) !== false) return true; } return false; } /** * Cap a string with a single instance of the given string. * * @param string $value * @param string $cap * @return string */ function str_finish($value, $cap) { return rtrim($value, $cap).$cap; } /** * Determine if the given object has a toString method. * * @param object $value * @return bool */ function str_object($value) { return is_object($value) and method_exists($value, '__toString'); } /** * Get the root namespace of a given class. * * @param string $class * @param string $separator * @return string */ function root_namespace($class, $separator = '\\') { if (str_contains($class, $separator)) { return head(explode($separator, $class)); } } /** * Get the "class basename" of a class or object. * * The basename is considered the name of the class minus all namespaces. * * @param object|string $class * @return string */ function class_basename($class) { if (is_object($class)) $class = get_class($class); return basename(str_replace('\\', '/', $class)); } /** * Return the value of the given item. * * If the given item is a Closure the result of the Closure will be returned. * * @param mixed $value * @return mixed */ function value($value) { return ($value instanceof Closure) ? call_user_func($value) : $value; } /** * Short-cut for constructor method chaining. * * @param mixed $object * @return mixed */ function with($object) { return $object; } /** * Determine if the current version of PHP is at least the supplied version. * * @param string $version * @return bool */ function has_php($version) { return version_compare(PHP_VERSION, $version) >= 0; } /** * Get a view instance. * * @param string $view * @param array $data * @return View */ function view($view, $data = array()) { if (is_null($view)) return ''; return Laravel\View::make($view, $data); } /** * Render the given view. * * @param string $view * @param array $data * @return string */ function render($view, $data = array()) { if (is_null($view)) return ''; return Laravel\View::make($view, $data)->render(); } /** * Get the rendered contents of a partial from a loop. * * @param string $view * @param array $data * @param string $iterator * @param string $empty * @return string */ function render_each($partial, array $data, $iterator, $empty = 'raw|') { return Laravel\View::render_each($partial, $data, $iterator, $empty); } /** * Get the string contents of a section. * * @param string $section * @return string */ function yield($section) { return Laravel\Section::yield($section); }