protected final function multidimensional(&$root, $keys, $create = false)
{
if ($create && empty($root)) {
$root = array();
}
if (!isset($root) || empty($keys)) {
return;
}
$last = array_pop($keys);
$node =& $root;
foreach ($keys as $key) {
if ($create && !isset($node[$key])) {
$node[$key] = array();
}
if (!is_array($node) || !isset($node[$key])) {
return;
}
$node =& $node[$key];
}
if ($create) {
if (!is_array($node)) {
// account for an array overriding a string or object value
$node = array();
}
if (!isset($node[$last])) {
$node[$last] = array();
}
}
if (!isset($node[$last])) {
return;
}
return array('root' => &$root, 'node' => &$node, 'key' => $last);
}