2017-10-06 77 views
1

我有一个像brachA-branchB-branchC这样的字符串。我试图使它的嵌套数组如下从带分隔符的字符串创建嵌套数组

[ 
    'name'=>'brachA', 
    'sub'=> [ 
      'name'=>'brachB', 
      'sub'=>[ 
       'name'=>'brachC' 
       ] 
      ] 
] 

我试过如下(https://3v4l.org/A781D

<?php 
$nested_array = array(); 
$temp = &$nested_array; 
$item = 'brachA-branchB-branchC'; 

foreach (explode('-', $item) as $key => $value) { 
     $temp = &$temp[$value]; 
} 

print_r($nested_array); 

输出我得到如下

Array 
(
    [brachA] => Array 
     (
      [branchB] => Array 
       (
        [branchC] => 
       ) 

     ) 

) 

任何想法,如何做到这一点?

回答

3

它可能可以使用foreach循环遍历由explode()返回的反向数组,但使用递归函数更容易。

function makeArray(array $pieces) 
{ 
    $first = array_shift($pieces); 

    $array = array('name' => $first); 
    if (count($pieces)) { 
     $array['sub'] = makeArray($pieces); 
    } 

    return $array; 
} 

$item = 'brachA-branchB-branchC'; 
print_r(makeArray(explode('-', $item))); 

makeArray()功能接收与所述串片段的阵列。它将第一个项目放在新数组的'name'键下,并与数组的其余部分一起调用以生成置于'sub'键之下的数组。如果没有休息,它不会为'sub'键放置任何东西(在最后一次呼叫时,$piecesarray('brachC')