@siricks

Добавление данных в многомерный массив на любую глубину?

Есть массив неограниченной вложенности, например:
$storage = [
    'people' => ['Name' => 'Bill' , 'Surname' => 'Milligan', 'age' => '32', 'sex' => 'male',
                'children' => ['name' => 'Sara', 'surname' => 'Milligan', 'age' => '10', 'sex' => 'female', 'mother' => 'Megan Milligan',
                'schools' => ['first' => ['name' => 'Priston School', 'address' => 'USA']]]
    ]
];


Нужно сделать функцию, которая сможет добавлять данные внутрь массива на любую глубину:
function set($param, $data){
    
}


в которой $param - адрес добавления вида 'people\children\schools\second' , а $data - данные для добавления, например: '['name' => 'Second School', 'address' => 'USA']'.

В результате по-сути должна выполнятся операция
$storage['people']['children']['schools']['second'] = ['name' => 'Second School', 'address' => 'USA'];

Загвоздка в том, как обеспечить добавление данных в массив на любую глубину
  • Вопрос задан
  • 218 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Snewer
function set_array_value(&$array, $key, $value){
        if(!is_array($key)){
            $key = explode('\\', $key);
        }

        $currentKey = array_shift($key);
        
        if(!is_array($array[$currentKey])){
            if(!isset($array[$currentKey])){
                $array[$currentKey] = [];
            } else {
                $array[$currentKey] = [ $array[$currentKey]];
            }
        }

        if(count($key) > 0){
            set_array_value($array[$currentKey], $key, $value);
        } else {
            if(is_array($array[$currentKey])){
                $array[$currentKey][] =  $value;
            } else {
                $array[$currentKey] = [$array[$currentKey], $value];
            }
        }
    }
Ответ написан
Ваш ответ на вопрос

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

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