@Him4enko

Как сформировать через рекурсию многомерный массив?

Мне надо по функции add('/test1/test2/test3/', 'Hello') формировать такого вида массив
Array ( [] => Array ( [test1] => Array ( [test2] => Array ( [test3] => Array ( [0] => Hello ) ) ) ) )
А при повторном вызове этой функции дополнять его в зависимости от переданных ключей.
К примеру , если вызвать второй раз add('/test1/test2/test4/', 'World');
Array ( [] => Array ( [test1] => Array ( [test2] => Array ( [test3] => Array ( [0] => Hello, [test4] => World) ) ) ) ).
Я пытался это реализовать таким образом, но он просто не дополняет.
public function add(string $keys, $value) 
    {
      if(empty($this->data)) {
        $keys_arr = explode('/', $keys);
        $tmp = &$this->data;
        foreach ($keys_arr as $key) {
            if(!end($keys_arr) == $key) {
                $tmp[$key] = [];
                $tmp = &$tmp[$key];
            }
            $tmp[$key] = [$value];
            $tmp = &$tmp[$key]; 
        }
      }
    }
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 2
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
массив который изменяется передавать как аргемент функции
на старте передаёте пустой массив и дальше он изменяется с каждой итерацией

функция add() не является рекурсивной так как не вызывает саму себя
если нужно сохранять состояние между вызоывами метода то добавьте в классе аттрибут куда будут складываться резльтаты
Ответ написан
Комментировать
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
$tmp = &$this->data; значит, что $tmp указывает на то же значение что и $this->data, а не наоборот.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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