public function filter(array $input, array $filterset)
{
foreach ($filterset as $field => $filters) {
if (!array_key_exists($field, $input)) {
continue;
}
$filters = explode('|', $filters);
foreach ($filters as $filter) {
$params = null;
if (strstr($filter, ',') !== false) {
$filter = explode(',', $filter);
$params = array_slice($filter, 1, count($filter) - 1);
$filter = $filter[0];
}
if (is_callable(array($this, 'filter_' . $filter))) {
$method = 'filter_' . $filter;
$input[$field] = $this->{$method}($input[$field], $params);
} elseif (function_exists($filter)) {
$input[$field] = $filter($input[$field]);
} elseif (isset(self::$filter_methods[$filter])) {
$input[$field] = call_user_func(self::$filter_methods[$filter], $input[$field], $params);
} else {
throw new Exception("Filter method '{$filter}' does not exist.");
}
}
}
return $input;
}