Как взять из многомерного массива значение, имея ключи этого значения в другом массиве или строке?
/**
 * Retrieves an element within multidimensional array stored on any level by it's keys.
 * @param array $data A multidimensional array with data
 * @param array $keys A list of keys to element stored in $data
 * @return null|mixed Returns null if elements is not found. Element's value otherwise.
 */
function getElement(array $data, array $keys)
{
    /** перебираем ключи */
    foreach($keys as $key) {
        /** 
         * Если текущий элемент - массив, и в нём есть ключ, то текущий массив перезаписываем на новый.
         * А если ключа такого нет или это не массив, то возвращаем null.
         */
        if (is_array($data) && array_key_exists($key, $data)) {
            $data = $data[$key];
        } else {
            return null;
        }
    }
    
    return $data;
}
Использовать как-то так:$data = [
  'key1' => [
    'key2' => [
      'key3' => [
        'value' => 123
      ]
    ]
  ]
];

echo getElement($data, ['key1', 'key2', 'key3', 'value']); // => 123Можно пойти дальше и упростить себе вызов этой функции буквальной парой строк:Добавляем обработку ключа как строки:/**
 * Retrieves an element within multidimensional array stored on any level by it's keys.
 * @param array $data A multidimensional array with data
 * @param string|array $keys A list of keys to element stored in $data as an array or a string with joined keys with a dot (.)
 * @return null|mixed Returns null if elements is not found. Element's value otherwise.
 */
function getElement(array $data, $keys)
{
    if (is_string($keys)) $keys = explode('.', $keys);
    /** перебираем ключи */
    foreach($keys as $key) {
        /** 
         * Если текущий элемент - массив, и в нём есть ключ, то текущий массив перезаписываем на новый.
         * А если ключа такого нет или это не массив, то возвращаем null.
         */
        if (is_array($data) && array_key_exists($key, $data)) {
            $data = $data[$key];
        } else {
            return null;
        }
    }
    
    return $data;
}
И уже можно делать так:echo getElement($data, 'key1.key2.key3.value'); // => 123
ну так по мере получения ключей и забраться внутрь$data[$key][$key2][$key3]