@fman2

Есть ли функция в php для доступа к массиву через символ?

Суть в чем. Есть файл конфигурации приложения.
Например:
$config = [
    'db' => [
        'host' => 'localhost'  
    ]
]


Чтобы не писать вот так: $config['db']['host'] и не делать $config глобальным, я написал свой велосипед вида: $obj->get('db.host'); и $obj->set('db.host', 'localhost'), который проверяет наличие ключа, возвращает null если его нет, а при set создает вложенность массивов и присваивает значение.

Это все хорошо, работает даже, но я потом подумал - а есть ли уже готовые функции на PHP которые это делают? Может зря я изобретал велосипед?
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
sanchezzzhak
@sanchezzzhak
Ля ля ля...
стандартных нет - нету, сделайте сами функцию себе. как хелпер.
В фреймворках yii2, laravel такой функционал есть.

из yii2
Class ArrayHelper {

 public static function getValue($array, $key, $default = null)
    {
        if ($key instanceof \Closure) {
            return $key($array, $default);
        }

        if (is_array($key)) {
            $lastKey = array_pop($key);
            foreach ($key as $keyPart) {
                $array = static::getValue($array, $keyPart);
            }
            $key = $lastKey;
        }

        if (is_array($array) && array_key_exists($key, $array)) {
            return $array[$key];
        }

        if (($pos = strrpos($key, '.')) !== false) {
            $array = static::getValue($array, substr($key, 0, $pos), $default);
            $key = substr($key, $pos + 1);
        }

        if (is_object($array)) {
            // this is expected to fail if the property does not exist, or __get() is not implemented
            // it is not reliably possible to check whether a property is accessable beforehand
            return $array->$key;
        } elseif (is_array($array)) {
            return array_key_exists($key, $array) ? $array[$key] : $default;
        } else {
            return $default;
        }
    }


}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы