PHP: построение многомерного массива - PullRequest
1 голос
/ 03 ноября 2011

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

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

Я хочу превратить его в такой:

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

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

Ответы [ 3 ]

2 голосов
/ 03 ноября 2011

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

$array = array(
          'level1' => array(
             'level2' => array(
                 'level3' => 1
              )
           )
         );
0 голосов
/ 03 ноября 2011

Вот мое мнение:

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)
      }
    }
  }
}
0 голосов
/ 03 ноября 2011

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

$levels = array_keys(Array(
  'level1' => 'someval',
  'level2' => 'someotherval',
  'level3' => 'thirdval'
));
$array = Array();
$aux = &$array;
foreach ($levels as $level => $value) {
   if ($aux == 1)
       $aux = array($value => 1);
   $aux = &$aux[$value];
}
var_dump($array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...