protected function _uri_to_assoc($n = 3, $default = array(), $which = 'segment')
{
if (!is_numeric($n)) {
return $default;
}
if (isset($this->keyval[$which], $this->keyval[$which][$n])) {
return $this->keyval[$which][$n];
}
$total_segments = "total_{$which}s";
$segment_array = "{$which}_array";
if ($this->{$total_segments}() < $n) {
return count($default) === 0 ? array() : array_fill_keys($default, NULL);
}
$segments = array_slice($this->{$segment_array}(), $n - 1);
$i = 0;
$lastval = '';
$retval = array();
foreach ($segments as $seg) {
if ($i % 2) {
$retval[$lastval] = $seg;
} else {
$retval[$seg] = NULL;
$lastval = $seg;
}
$i++;
}
if (count($default) > 0) {
foreach ($default as $val) {
if (!array_key_exists($val, $retval)) {
$retval[$val] = NULL;
}
}
}
// Cache the array for reuse
isset($this->keyval[$which]) or $this->keyval[$which] = array();
$this->keyval[$which][$n] = $retval;
return $retval;
}