Added array notation for keys in Input library
diff --git a/system/core/Input.php b/system/core/Input.php
index 8d491e0..ffe7b4d 100644
--- a/system/core/Input.php
+++ b/system/core/Input.php
@@ -149,21 +149,59 @@
 	 * @param	array	&$array		$_GET, $_POST, $_COOKIE, $_SERVER, etc.
 	 * @param	string	$index		Index for item to be fetched from $array
 	 * @param	bool	$xss_clean	Whether to apply XSS filtering
+	 * @param	bool	$recurse	Whether to recurse into arrays via nested keys
 	 * @return	mixed
 	 */
-	protected function _fetch_from_array(&$array, $index = '', $xss_clean = FALSE)
+	protected function _fetch_from_array(&$array, $index = '', $xss_clean = FALSE, $recurse = FALSE)
 	{
-		if ( ! isset($array[$index]))
+		$value = NULL;
+
+		if (isset($array[$index]))
 		{
-			return NULL;
+			$value = $array[$index];
+		}
+		else if($recurse)
+		{
+			// We couldn't find the $field as a simple key, so try the nested notation
+			$key = $index;
+			$container = $array;
+			
+			// Test if the $index is an array name, and try to obtain the final index
+			if (preg_match_all('/\[(.*?)\]/', $index, $matches))
+			{
+				sscanf($index, '%[^[][', $key);
+				for ($i = 0, $c = count($matches[0]); $i < $c; $i++)
+				{
+					if($matches[1][$i] === '')			// The array notation will return the value as array
+					{
+						break;
+					}
+					if (isset($container[$key]))
+					{
+						$container = $container[$key];
+						$key = $matches[1][$i];
+					}
+					else
+					{
+						$container = array();
+						break;
+					}
+				}
+
+				// Check if the deepest container has the field
+				if(isset($container[$key]))
+				{
+					$value = $container[$key];
+				}
+			}
 		}
 
 		if ($xss_clean === TRUE)
 		{
-			return $this->security->xss_clean($array[$index]);
+			return $this->security->xss_clean($value);
 		}
 
-		return $array[$index];
+		return $value;
 	}
 
 	// --------------------------------------------------------------------
@@ -173,9 +211,10 @@
 	 *
 	 * @param	string	$index		Index for item to be fetched from $_GET
 	 * @param	bool	$xss_clean	Whether to apply XSS filtering
+	 * @param	bool	$recurse	Whether to recurse into arrays via nested keys
 	 * @return	mixed
 	 */
-	public function get($index = NULL, $xss_clean = FALSE)
+	public function get($index = NULL, $xss_clean = FALSE, $recurse = FALSE)
 	{
 		// Check if a field has been provided
 		if ($index === NULL)
@@ -190,12 +229,12 @@
 			// loop through the full _GET array
 			foreach (array_keys($_GET) as $key)
 			{
-				$get[$key] = $this->_fetch_from_array($_GET, $key, $xss_clean);
+				$get[$key] = $this->_fetch_from_array($_GET, $key, $xss_clean, $recurse);
 			}
 			return $get;
 		}
 
-		return $this->_fetch_from_array($_GET, $index, $xss_clean);
+		return $this->_fetch_from_array($_GET, $index, $xss_clean, $recurse);
 	}
 
 	// --------------------------------------------------------------------
@@ -205,9 +244,10 @@
 	 *
 	 * @param	string	$index		Index for item to be fetched from $_POST
 	 * @param	bool	$xss_clean	Whether to apply XSS filtering
+	 * @param	bool	$recurse	Whether to recurse into arrays via nested keys
 	 * @return	mixed
 	 */
-	public function post($index = NULL, $xss_clean = FALSE)
+	public function post($index = NULL, $xss_clean = FALSE, $recurse = FALSE)
 	{
 		// Check if a field has been provided
 		if ($index === NULL)
@@ -222,12 +262,12 @@
 			// Loop through the full _POST array and return it
 			foreach (array_keys($_POST) as $key)
 			{
-				$post[$key] = $this->_fetch_from_array($_POST, $key, $xss_clean);
+				$post[$key] = $this->_fetch_from_array($_POST, $key, $xss_clean, $recurse);
 			}
 			return $post;
 		}
 
-		return $this->_fetch_from_array($_POST, $index, $xss_clean);
+		return $this->_fetch_from_array($_POST, $index, $xss_clean, $recurse);
 	}
 
 	// --------------------------------------------------------------------
@@ -237,13 +277,14 @@
 	 *
 	 * @param	string	$index		Index for item to be fetched from $_POST or $_GET
 	 * @param	bool	$xss_clean	Whether to apply XSS filtering
+	 * @param	bool	$recurse	Whether to recurse into arrays via nested keys
 	 * @return	mixed
 	 */
-	public function get_post($index = '', $xss_clean = FALSE)
+	public function get_post($index = '', $xss_clean = FALSE, $recurse = FALSE)
 	{
 		return isset($_POST[$index])
-			? $this->post($index, $xss_clean)
-			: $this->get($index, $xss_clean);
+			? $this->post($index, $xss_clean, $recurse)
+			: $this->get($index, $xss_clean, $recurse);
 	}
 
 	// --------------------------------------------------------------------
@@ -253,11 +294,12 @@
 	 *
 	 * @param	string	$index		Index for item to be fetched from $_COOKIE
 	 * @param	bool	$xss_clean	Whether to apply XSS filtering
+	 * @param	bool	$recurse	Whether to recurse into arrays via nested keys
 	 * @return	mixed
 	 */
-	public function cookie($index = '', $xss_clean = FALSE)
+	public function cookie($index = '', $xss_clean = FALSE, $recurse = FALSE)
 	{
-		return $this->_fetch_from_array($_COOKIE, $index, $xss_clean);
+		return $this->_fetch_from_array($_COOKIE, $index, $xss_clean, $recurse);
 	}
 
 	// --------------------------------------------------------------------