2017-10-06 143 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')

相關問題