Today I played with the code a little to see if I could implement url-style arguments. And while I was working on it, I also changed the array-style arguments implementation, because I didn’t understand how to call the controller and method in the default implementation 
Now you can choose if you want to call the controller url-style:
$this->load->controller('controller/method/var1/var2/var3'); // supports unlimited amount of parameters
or array-style:
$params = array('var1'=>'value1', 'var2'=>'value2', 'var3'=>'value3');
$this->load->controller('controller/method/', $params);
Here’s the code:
// from line 59
function load($uri, $params='') // <- this changed
{
$uri = explode('/', $uri);
$router = &load;_class('Router');
$router->_set_request($uri);
include(APPPATH . 'controllers/' . $router->fetch_directory() . $router->fetch_class() . EXT);
$class = $router->fetch_class();
$method = $router->fetch_method();
$controller = new $class();
// changed below
if(!$params){
// get arguments from uri
$params = array_slice($uri, 2);
call_user_func_array(array($controller, $method), $params);
}
else // user defined array-style arguments
{
$controller->$method($params);
}
}
Hopefully someone finds it useful