php - доступ к вложенным элементам массива

147
12 января 2019, 00:20

Есть многомерный массив.

Нужно написать функцию которая будет выводить нужный элемент по цепочке ключей с разделителем.

Примерно вот так:

// точка в качестве разделителя
$result = get_array_el($array, 'level.level_2.level_3.level_N')

function get_array_el($array, $key_string, $default = null){
    // точки нет - значит 1й уровень вложенности
    if(strpos($key, '.') === false){
        return isset($array[$key_string]) ? $array[$key_string] : $default; 
    }
    // получаем все уровни 
    $levels = explode('.', $key_string);

    // и тут нужно как то так.
    // но я не могу придумать как
    return $array[$levels[0]][$levels[1]][$levels[2]][$levels[N]]
}

Вот что получилось. Конечно хотелось универсального решения. Но в моем случае хватит 3-х уровней вложенности.

function get_array_el($array, $key_string, $default = null){
    // точки нет - значит 1й уровень вложенности
    if(strpos($key, '.') === false){
        return isset($array[$key_string]) ? $array[$key_string] : $default; 
    }

    // получаем все уровни 
    $lvl = explode('.', $key_string);
    // вложенность 2
    if (count($lvl) == 2) {
        return isset($array[$lvl[0]][$lvl[1]]) ? $array[$lvl[0]][$lvl[1]] : $default;
    }
    // вложенность 3
    elseif (count($lvl) == 3) {
        return isset($array[$lvl[0]][$lvl[1]][$lvl[2]]) ? $array[$lvl[0]][$lvl[1]][$lvl[2]] : $default;
    }
    return $default;
}
READ ALSO
Laravel updateOrCreate - 1062 Duplicate entry

Laravel updateOrCreate - 1062 Duplicate entry

Есть такая таблица:

237
Не выводится страница ошибки Yii2

Не выводится страница ошибки Yii2

Пишу сайт на yii2В конфиге имею такую настройку

151
Перевод строки в формулу php

Перевод строки в формулу php

Пользователь вводит произвольную формулу, которая сохраняется в БДВ формуле есть подстановки значений из последующих форм, к примеру:

194
MySQL Одинаковый запрос в разные таблицы

MySQL Одинаковый запрос в разные таблицы

Сейчас есть 2 таблицы, которых в дальнейшем будет 13Каждая таблица абсолютно идентична по структуре, каждая проиндексирована по нужным параметрам...

170