2010-11-30 2 views
1

Я пытаюсь добавить элементы к югу от массива вспомогательного массива, в котором они были добавлены в предыдущей итерации, т.е. преобразование этого:Добавление элементов в подрешетке рекурсивно

$a = array('a', 'b', 'c'); 

в этом:

$new_array = array(
    'a' => array(
     'b' => array(
      'c' => array() 
     ) 
    ) 
); 

ответ

3
$a = array('a', 'b', 'c'); 

$tmp = array_reverse($a); 

$new_array = array(); 
foreach ($tmp as $item) { $new_array = array($item => $new_array); } 
+0

Простейший способ сделать это далеко. Это помогло мне, спасибо. – 2010-11-30 11:16:58

1
function makeArrayChain($chain) 
{ 
    $key = array_shift($chain); 

    if ($key === NULL) { 
     return array(); 
    } else { 
     return array($key => makeArrayChain($chain)); 
    } 
} 

var_dump(makeArrayChain(array('a', 'b', 'c')); 

array(1) { 
    ["a"]=> 
    array(1) { 
    ["b"]=> 
    array(1) { 
     ["c"]=> 
     array(0) { 
     } 
    } 
    } 
} 
1

Аналогично решению @aibs.

<?php 

function splitIntoSubArray($array) { 
    return $array ? array(array_shift($array) => splitIntoSubArray($array)) : array(); 
} 

$a = array('a', 'b', 'c'); 

print_r(splitIntoSubArray($a)); 

Выход:

Array 
(
    [a] => Array 
     (
      [b] => Array 
       (
        [c] => Array 
         (
         ) 

       ) 

     ) 

) 
Смежные вопросы