protected static function getFilteredArray(array $allowedKeys, array $values, $caseInsensitive = true)
{
$arr = array();
if ($caseInsensitive) {
$allowedKeys = array_combine(array_map('strtolower', $allowedKeys), $allowedKeys);
} else {
$allowedKeys = array_combine($allowedKeys, $allowedKeys);
}
$regexp = array();
foreach ($allowedKeys as $k => $v) {
if (substr($v, -1) == '-') {
$regexp[] = '#^' . preg_quote($k, "#") . '.+$#i';
unset($allowedKeys[$k]);
}
}
foreach ($values as $k => $v) {
if ($caseInsensitive === true) {
$k = strtolower($k);
}
if (isset($allowedKeys[$k])) {
$arr[$allowedKeys[$k]] = $v;
} else {
if (!empty($regexp)) {
foreach ($regexp as $reg) {
if (preg_match($reg, $k)) {
$arr[$k] = $v;
break 1;
}
}
}
}
}
return $arr;
}