• Как взять из многомерного массива значение, имея ключи этого значения в другом массиве или строке?

    Bariss2013
    @Bariss2013
    Норм поцык!
    Могу предложить вот такое решение на основе рекурсии.
    /**
     * Получает из многомерного массива элемент по ключу в виде строки,
     * где каждый уровень вложенности отделен точкой, если такой элемент не будет найден,
     * то вернет значение по умолчанию
     *
     * @param $array - многомерный ассоциативный массив
     * @param $key - ключ, формата xxx.xxx.xx. Например: db.mysql.host
     * @param null $default
     *
     * @return mixed|null
     */
    function arrayGet(array $array, string $key, $default = null)
    {
        if (!empty($key)) {
            //разбиваем вложенность ключей на массив
            $levels = explode('.', $key);
            //получаем текущий уровень
            $currentLevel = array_shift($levels);
            //если текущий ключ существует
            if (array_key_exists($currentLevel, $array)) {
                //если значение текущего ключа является массивом, проверяем этот массив
                if (is_array($array[$currentLevel])) {
                    //рекурсивный вызов с перезаписанными аргументами
                    return arrayGet($array[$currentLevel], implode('.', $levels), $default);
                }
    
                //возвращаем значение по ключу, если оно скалярное
                return $array[$currentLevel];
            }
        }
    
        //возвращаем значение по умолчанию
        return $default;
    }
    Ответ написан
    1 комментарий