Arr
Kohana_Arr

Class Contents

Class declared in SYSPATH/classes/arr.php on line 3.

Properties

public static $delimiter
string(1) "."

Methods

Source Code
public static function binary_search($needle, $haystack, $sort = FALSE)
{
	return array_search($needle, $haystack);
}

public static callback( )
Kohana_Arr

Source Code
public static function callback($str)
{
	// Overloaded as parts are found
	$command = $params = NULL;

	// command[param,param]
	if (preg_match('/^([^\(]*+)\((.*)\)$/', $str, $match))
	{
		// command
		$command = $match[1];

		if ($match[2] !== '')
		{
			// param,param
			$params = preg_split('/(?<!\\\\),/', $match[2]);
			$params = str_replace('\,', ',', $params);
		}
	}
	else
	{
		// command
		$command = $str;
	}

	if (strpos($command, '::') !== FALSE)
	{
		// Create a static method callable command
		$command = explode('::', $command, 2);
	}

	return array($command, $params);
}

public static extract( )
Kohana_Arr

Source Code
public static function extract($array, array $keys, $default = NULL)
{
	$found = array();
	foreach ($keys as $key)
	{
		$found[$key] = isset($array[$key]) ? $array[$key] : $default;
	}

	return $found;
}

public static flatten( )
Kohana_Arr

Source Code
public static function flatten($array)
{
	$flat = array();
	foreach ($array as $key => $value)
	{
		if (is_array($value))
		{
			$flat += Arr::flatten($value);
		}
		else
		{
			$flat[$key] = $value;
		}
	}
	return $flat;
}

public static get( )
Kohana_Arr

Source Code
public static function get($array, $key, $default = NULL)
{
	return isset($array[$key]) ? $array[$key] : $default;
}

public static is_array( )
Kohana_Arr

Source Code
public static function is_array($value)
{
	if (is_array($value))
	{
		// Definitely an array
		return TRUE;
	}
	else
	{
		// Possibly a Traversable object, functionally the same as an array
		return (is_object($value) AND $value instanceof Traversable);
	}
}

public static is_assoc( )
Kohana_Arr

Source Code
public static function is_assoc(array $array)
{
	// Keys of the array
	$keys = array_keys($array);

	// If the array keys of the keys match the keys, then the array must
	// not be associative (e.g. the keys array looked like {0:0, 1:1...}).
	return array_keys($keys) !== $keys;
}

public static map( )
Kohana_Arr

Source Code
public static function map($callback, $array)
{
	foreach ($array as $key => $val)
	{
		if (is_array($val))
		{
			$array[$key] = Arr::map($callback, $val);
		}
		else
		{
			$array[$key] = call_user_func($callback, $val);
		}
	}

	return $array;
}

public static merge( )
Kohana_Arr

Source Code
public static function merge(array $a1, array $a2)
{
	$result = array();
	for ($i = 0, $total = func_num_args(); $i < $total; $i++)
	{
		// Get the next array
		$arr = func_get_arg($i);

		// Is the array associative?
		$assoc = Arr::is_assoc($arr);

		foreach ($arr as $key => $val)
		{
			if (isset($result[$key]))
			{
				if (is_array($val) AND is_array($result[$key]))
				{
					if (Arr::is_assoc($val))
					{
						// Associative arrays are merged recursively
						$result[$key] = Arr::merge($result[$key], $val);
					}
					else
					{
						// Find the values that are not already present
						$diff = array_diff($val, $result[$key]);

						// Indexed arrays are merged to prevent duplicates
						$result[$key] = array_merge($result[$key], $diff);
					}
				}
				else
				{
					if ($assoc)
					{
						// Associative values are replaced
						$result[$key] = $val;
					}
					elseif ( ! in_array($val, $result, TRUE))
					{
						// Indexed values are added only if they do not yet exist
						$result[] = $val;
					}
				}
			}
			else
			{
				// New values are added
				$result[$key] = $val;
			}
		}
	}

	return $result;
}

public static overwrite( )
Kohana_Arr

Source Code
public static function overwrite($array1, $array2)
{
	foreach (array_intersect_key($array2, $array1) as $key => $value)
	{
		$array1[$key] = $value;
	}

	if (func_num_args() > 2)
	{
		foreach (array_slice(func_get_args(), 2) as $array2)
		{
			foreach (array_intersect_key($array2, $array1) as $key => $value)
			{
				$array1[$key] = $value;
			}
		}
	}

	return $array1;
}

public static path( )
Kohana_Arr

Source Code
public static function path($array, $path, $default = NULL, $delimiter = NULL)
{
	if ( ! Arr::is_array($array))
	{
		// This is not an array!
		return $default;
	}

	if (is_array($path))
	{
		// The path has already been separated into keys
		$keys = $path;
	}
	else
	{
		if (array_key_exists($path, $array))
		{
			// No need to do extra processing
			return $array[$path];
		}

		if ($delimiter === NULL)
		{
			// Use the default delimiter
			$delimiter = Arr::$delimiter;
		}

		// Remove starting delimiters and spaces
		$path = ltrim($path, "{$delimiter} ");

		// Remove ending delimiters, spaces, and wildcards
		$path = rtrim($path, "{$delimiter} *");

		// Split the keys by delimiter
		$keys = explode($delimiter, $path);
	}

	do
	{
		$key = array_shift($keys);

		if (ctype_digit($key))
		{
			// Make the key an integer
			$key = (int) $key;
		}

		if (isset($array[$key]))
		{
			if ($keys)
			{
				if (Arr::is_array($array[$key]))
				{
					// Dig down into the next part of the path
					$array = $array[$key];
				}
				else
				{
					// Unable to dig deeper
					break;
				}
			}
			else
			{
				// Found the path requested
				return $array[$key];
			}
		}
		elseif ($key === '*')
		{
			// Handle wildcards

			$values = array();
			foreach ($array as $arr)
			{
				if ($value = Arr::path($arr, implode('.', $keys)))
				{
					$values[] = $value;
				}
			}

			if ($values)
			{
				// Found the values requested
				return $values;
			}
			else
			{
				// Unable to dig deeper
				break;
			}
		}
		else
		{
			// Unable to dig deeper
			break;
		}
	}
	while ($keys);

	// Unable to find the value requested
	return $default;
}

public static pluck( )
Kohana_Arr

Source Code
public static function pluck($array, $key)
{
	$values = array();

	foreach ($array as $row)
	{
		if (isset($row[$key]))
		{
			// Found a value in this row
			$values[] = $row[$key];
		}
	}

	return $values;
}

public static range( )
Kohana_Arr

Source Code
public static function range($step = 10, $max = 100)
{
	if ($step < 1)
		return array();

	$array = array();
	for ($i = $step; $i <= $max; $i += $step)
	{
		$array[$i] = $i;
	}

	return $array;
}

public static unshift( )
Kohana_Arr

Source Code
public static function unshift( array & $array, $key, $val)
{
	$array = array_reverse($array, TRUE);
	$array[$key] = $val;
	$array = array_reverse($array, TRUE);

	return $array;
}