Решение на скорую руку:
function getElementByPath(array &$arr, array $path) {
$el = $arr[array_shift($path)];
if (count($path) === 0) {
return $el;
}
return getElementByPath($el, $path);
}
Пример работы:
$arr = array(
'one' => array(
'two' => array(
'three' => 'stroka'
)
)
);
$path = array(
'one',
'two',
'three'
);
$el = getElementByPath($arr, $path);
var_dump($el); // ---> 'stroka'
Добавите всяких проверок и будет ок.
UPD1. Решение чуть получше: // Последний параметр значение, если элемент не найден
function getElementByPath(array &$arr, array $path, $initial = null) {
return array_reduce($path, function (&$res, $key) use (&$initial) {
return is_array($res) && isset($res[$key]) ? $res[$key] : $initial;
}, $arr);
}