PHP: построение многомерного массива

#php #multidimensional-array

#php #многомерный массив

Вопрос:

У меня есть такой массив:

 Array(
  'level1' => 'someval',
  'level2' => 'someotherval',
  'level3' => 'thirdval'
)
  

Я хочу превратить это в это:

 Array(
  'someval' => Array(
    'someotherval' => Array(
      'thirdval' => 1
    )
  )
)
  

Очевидно, я мог бы построить приведенный выше пример вручную, но я не знаю, сколько там будет уровней. И этот простой пример может показаться бесполезным, но значений будет больше, поэтому внутри каждого из уровней будет несколько массивов.

Комментарии:

1. Ваши вопросы немного расплывчаты? что вам нужно хранить внутри многомерного массива? Какие состояния, на какой уровень должен быть вложен массив и т.д. и т.п.? Будет ли этот шаблон продолжаться или некоторые уровни будут содержать несколько значений?

2. Откуда берется ценность 1 ?

3. @Tim Cooper Извините, это была опечатка.

Ответ №1:

Это сделает это

 $array = array(
          'level1' => array(
             'level2' => array(
                 'level3' => 1
              )
           )
         );
  

Комментарии:

1. Извините, я неправильно напечатал часть своего вопроса. Пожалуйста, также посмотрите последний абзац. Я могу легко построить массив так, как вы продемонстрировали, но я не знаю, сколько в нем будет уровней, поэтому мне нужно рекурсивно перебирать его или что-то подобное.

2. Не уверен, что вы ищете, но вы можете исследовать «передачу по ссылке» и «рекурсивные» вызовы функций / методов. Это может немного помочь вашему пониманию.

Ответ №2:

Вот мой взгляд на это:

 function make_multi_level_array($arr) {
        if (count($arr) == 1) return array(array_pop($arr) => 1);
        else {
                $level_key = array_pop(array_reverse($arr));
                $sub_level = make_multi_level_array(
                        array_slice($arr,1,count($arr)-1)       
                );
                return array(
                        $level_key => $sub_level
                );
        }       

}
$arr = array(
   'level1' => 'someval',
   'level2' => 'someotherval',
   'level3' => 'thirdval',
);

var_dump(make_multi_level_array($arr));
  

Выведет это:

 array(1) {
  ["someval"]=>
  array(1) {
    ["someotherval"]=>
    array(1) {
      ["thirdval"]=>
      int(1)
    }
  }
}
  

Также пробовал другие случаи, подобные приведенным ниже.

 $arr = array(
  'level1' => 'someval',
  'level2' => 'someotherval',
  'level3' => 'thirdval',
  'level4' => 'fourthval'
);
  

Кажется, все в порядке:

 array(1) {
  ["someval"]=>
  array(1) {
    ["someotherval"]=>
    array(1) {
      ["thirdval"]=>
      array(1) {
        ["fourthval"]=>
        int(1)
      }
    }
  }
}
  

Ответ №3:

Вам нужно что-то подобное?

 $levels = array_keys(Array(
  'level1' => 'someval',
  'level2' => 'someotherval',
  'level3' => 'thirdval'
));
$array = Array();
$aux = amp;$array;
foreach ($levels as $level => $value) {
   if ($aux == 1)
       $aux = array($value => 1);
   $aux = amp;$aux[$value];
}
var_dump($array);
  

Комментарии:

1. Никогда раньше не пробовал использовать «amp;» в PHP. Выглядит хорошо. Попробую 🙂