array_get: безопасный доступ к вложенным массивам

Когда приходится работать с глубоко вложенными данными — например, ответом API или настройками в виде array, — каждый isset($arr['a']['b']['c']) превращается в головную боль. Опять Undefined index, опять try…catch или @-подавление ошибок.

Сниппет-функция array_get позволяет достать значение по «точечному» ключу и вернуть дефолт, если чего-то не хватает
if (! function_exists('array_get')) {
    /**
     * Получить значение из вложенного массива по ключу вида "foo.bar.baz"
     *
     * @param array       $array   Исходный массив
     * @param string      $key     Ключ, уровни через точку
     * @param mixed|null  $default Значение, если ключ не найден
     * @return mixed
     */
    function array_get(array $array, string $key, $default = null)
    {
        if ($key === '') {
            return $default;
        }

        foreach (explode('.', $key) as $segment) {
            if (is_array($array) && array_key_exists($segment, $array)) {
                $array = $array[$segment];
            } else {
                return $default;
            }
        }

        return $array;
    }
}

// Пример использования
$config = [
    'db' => [
        'host' => 'localhost',
        'options' => [
            'timeout' => 30
        ]
    ]
];

$timeout = array_get($config, 'db.options.timeout', 5);     // 30
$user    = array_get($config, 'db.user', 'root');          // 'root'