1
0
mirror of https://github.com/monstra-cms/monstra.git synced 2025-08-05 04:37:51 +02:00
Files
php-monstra/libraries/Gelato/Arr/Arr.php
2013-01-08 22:16:29 +02:00

188 lines
4.6 KiB
PHP

<?php
/**
* Gelato Library
*
* This source file is part of the Gelato Library. More information,
* documentation and tutorials can be found at http://gelato.monstra.org
*
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class Arr
{
/**
* Protected constructor since this is a static class.
*
* @access protected
*/
protected function __construct()
{
// Nothing here
}
/**
* Subval sort
*
* <code>
* $new_array = Arr::subvalSort($old_array, 'sort');
* </code>
*
* @param array $a Array
* @param string $subkey Key
* @param string $order Order type DESC or ASC
* @return array
*/
public static function subvalSort($a, $subkey, $order = null)
{
if (count($a) != 0 || (!empty($a))) {
foreach ($a as $k => $v) $b[$k] = function_exists('mb_strtolower') ? mb_strtolower($v[$subkey]) : strtolower($v[$subkey]);
if ($order == null || $order == 'ASC') asort($b); else if ($order == 'DESC') arsort($b);
foreach ($b as $key => $val) $c[] = $a[$key];
return $c;
}
}
/**
* Returns value from array using "dot notation".
* If the key does not exist in the array, the default value will be returned instead.
*
* <code>
* $login = Arr::get($_POST, 'login');
*
* $array = array('foo' => 'bar');
* $foo = Arr::get($array, 'foo');
*
* $array = array('test' => array('foo' => 'bar'));
* $foo = Arr::get($array, 'test.foo');
* </code>
*
* @param array $array Array to extract from
* @param string $path Array path
* @param mixed $default Default value
* @return mixed
*/
public static function get($array, $path, $default = null)
{
// Get segments from path
$segments = explode('.', $path);
// Loop through segments
foreach ($segments as $segment) {
// Check
if ( ! is_array($array) || !isset($array[$segment])) {
return $default;
}
// Write
$array = $array[$segment];
}
// Return
return $array;
}
/**
* Deletes an array value using "dot notation".
*
* <code>
* Arr::delete($array, 'foo.bar');
* </code>
*
* @access public
* @param array $array Array you want to modify
* @param string $path Array path
* @return boolean
*/
public static function delete(&$array, $path)
{
// Get segments from path
$segments = explode('.', $path);
// Loop through segments
while (count($segments) > 1) {
$segment = array_shift($segments);
if ( ! isset($array[$segment]) || !is_array($array[$segment])) {
return false;
}
$array =& $array[$segment];
}
unset($array[array_shift($segments)]);
return true;
}
/**
* Checks if the given dot-notated key exists in the array.
*
* <code>
* if (Arr::keyExists($array, 'foo.bar')) {
* // Do something...
* }
* </code>
*
* @param array $array The search array
* @param mixed $path Array path
* @return boolean
*/
public static function keyExists($array, $path)
{
foreach (explode('.', $path) as $segment) {
if ( ! is_array($array) or ! array_key_exists($segment, $array)) {
return false;
}
$array = $array[$segment];
}
return true;
}
/**
* Returns a random value from an array.
*
* <code>
* Arr::random(array('php', 'js', 'css', 'html'));
* </code>
*
* @access public
* @param array $array Array path
* @return mixed
*/
public static function random($array)
{
return $array[array_rand($array)];
}
/**
* Returns TRUE if the array is associative and FALSE if not.
*
* <code>
* if (Arr::isAssoc($array)) {
* // Do something...
* }
* </code>
*
* @param array $array Array to check
* @return boolean
*/
public static function isAssoc($array)
{
return (bool) count(array_filter(array_keys($array), 'is_string'));
}
}