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'